-
Rendu en HTML
-
Rendu en PDF
-
Rendu en CSV
DSL de niveau supérieur qui est responsable de l’organisation des éléments graphiques de la page et de la mise à jour des blocs ajax. Dans le cas où nous rendons une page complète, nous devons également spécifier la description du menu de la page via le lien :menu-dsl.adoc[Menu DSL].
Ce DSL est également responsable de la gestion de la pile de fenêtres modales. Ouvrez une modale en utilisant modal
ou fermez une modale en utilisant closeModalAndUpdateBlock
(et d’autres variantes).
Exemple de code de construction de blocs
def editSlideshow(CmsPage slideshow) {
UiBlockSpecifier b = new UiBlockSpecifier()
Boolean createNew = slideshow == null
if (!slideshow)
slideshow = new CmsPage(pageType: CmsPageType.SLIDESHOW)
b.ui {
if (createNew)
modal {
form
buildCmsSlideshowForm(slideshow),
BlockSpec.Width.MAX
}
else {
anonymousBlock BlockSpec.Width.HALF, { (1)
form
buildCmsSlideshowForm(slideshow),
BlockSpec.Width.MAX
}
blockTabs BlockSpec.Width.HALF, {
blockTab "Images", buildImagesTab(slideshow)(2)
blockTab "Videos", buildVideosTab(slideshow)
}
}
}
taackUiService.show(b, buildMenu()) (3)
1 | Déclarer un bloc invisible de 1/2 largeur de fenêtre |
2 | Déclarer 2 onglets à l’intérieur, le premier s’affiche lorsque la page apparaît |
3 | Envoyer le bloc avec la description du menu au navigateur. |
Exemple de code de pile modale
Après avoir traité un formulaire, vous pouvez actualiser le contenu de la page ou d’un autre modal sous celui en cours. Vous pouvez également recharger la page ou afficher une autre page. Le rechargement de la page permet au code d’être réutilisable, car il ne dépend pas de l’URL actuelle (rappelez-vous les paramètres redirectAction
que vous voyez dans le lien :../../first-app.adoc#_adding_buttons_to_a_table_block[First App (Adding buttons to a table block)] .
En général, une fenêtre modale est fermée après le traitement d’un formulaire. Soit elle n’est pas valide, et les erreurs sont affichées dans le navigateur directement dans le formulaire, soit nous enregistrons l’objet et actualisons le contenu.
Voir
Fermer la fenêtre modale et recharger la page
@Transactional
@Secured(["ROLE_CMS_MANAGER", "ROLE_CMS_DIRECTOR"])
def saveCmsInsert() {
taackSaveService.saveThenReloadOrRenderErrors(CmsInsert)
}
Si aucune erreur n’est enregistrement de CmsInsert détecté, la page est simplement rechargée.
Fermer la modale et charger une page
@Transactional
@Secured(["ROLE_ADMIN", "ROLE_CMS_MANAGER", "ROLE_CMS_DIRECTOR"])
def saveCmsPage() {
taackSaveService.saveThenRedirectOrRenderErrors( (1)
CmsPage, this.&pages as MethodClosure
)
}
1 | La fermeture de méthode dans ce contrôleur sera chargée (en respectant les mappages d’URL) |
Fermer la modale et actualiser les blocs ajax de la page
taackSaveService.saveThenDisplayBlockOrRenderErrors(
EngineeringChangeRequest, (1)
new UiBlockSpecifier().ui { (2)
closeModalAndUpdateBlock { (3)
show "Projects", buildShowProjects(ecr),
BlockSpec.Width.MAX, {
action
ActionIcon.ADD,
Ecr2Controller.&projectsForm as MC,
[id: ecr.id, ajaxBlockId: ajaxBlockId]
}
}
}
)
1 | Après qu’une action impliquant la sauvegarde d’un objet est appelée dans une fenêtre modale, vous pouvez fermer la fenêtre modale et actualiser les éléments de la page en une seule action |
2 | saveThenDisplayBlockOrRenderErrors prend un UiBlockSpecifier comme paramètre |
3 | closeModalAndUpdateBlock fermera d’abord la dernière fenêtre modale ouverte, puis appliquera la modification |
Symboles DSL de bloc Hiérarchie
ajaxBlock
peut entourer d’autres éléments et permet de mettre à jour seulement une partie de la page.