Table of Contents
Ces cas d’utilisation montrent ce qui relève de la responsabilité du développeur d’application (sur les diagrammes, il s’agit de l’acteur controller) et ce qui est pris en charge automatiquement par le framework (rectangle bleu clair).
Afficher un formulaire et enregistrer un objet
Deux actions sont impliquées et utilisent 2 services :
Figure 1. Diagramme de séquence du rendu d’un formulaire et du traitement d’un objet
Exemple de code : workflow formulaire + enregistrement
def userForm(User user) { (1)
user ?= new User() (2)
UiFormSpecifier f = new UiFormSpecifier() (3)
f.ui user, {
hiddenField user.subsidiary_
hiddenField user.origin_
section "User", {
field user.username_
field user.firstName_
field user.lastName_
ajaxField user.manager_, this.&selectUserM2O as MC
field user.trigram_
field user.password_
}
section "Coords", {
field user.businessUnit_
field user.job_
field user.directPhone_
field user.additionalPhone_
field user.mail_
field user.mainSubsidiary_
field user.allowedSubsidiaries_
}
// [. . .]
formAction this.&saveUser as MC, user.id (4)
}
taackUiService.show new UiBlockSpecifier().ui { (5)
modal {
form "User Form", f, BlockSpec.Width.MAX
}
}
}
@Transactional
@Secured("ROLE_ADMIN") (6)
def saveUser() { (7)
taackSaveService.saveThenRedirectOrRenderErrors(User, this.&listUser) (8)
}
| 1 | Action affichant le formulaire |
| 2 | Crée l’objet s’il est null |
| 3 | Crée le formulaire |
| 4 | Bouton de formulaire qui envoie les données du formulaire à l’action saveUser |
| 5 | Affiche le formulaire |
| 6 | Sécurise l’action d’enregistrement |
| 7 | Action qui enregistrera l’objet |
| 8 | Appel à taackSaveService ; ici, si l’objet est valide, l’utilisateur est redirigé vers l’action listUsers. |
Afficher un tableau avec des colonnes triables, des actions en ligne et un filtre
Une seule action est nécessaire pour gérer la pagination, le filtrage et le tri :
Figure 2. Diagramme de séquence gérant l’action sur un tableau pour traiter une liste d’objets
Exemple de code pour filtre et tableau
def index() { (1)
User cu = authenticatedUser as User
UiFilterSpecifier f = buildUserTableFilter cu (2)
UiTableSpecifier t = buildUserTable f (3)
UiBlockSpecifier b = new UiBlockSpecifier().ui { (4)
tableFilter(f, t) {
menuIcon ActionIcon.ADD, this.&userForm as MC (5)
}
}
taackUiService.show(b, buildMenu()) (6)
}
| 1 | Action qui affiche une liste d’objets |
| 2 | Construit le filtre ; ici, le filtre prend l’utilisateur actuellement connecté en paramètre car nous souhaitons pouvoir lister l’équipe de l’utilisateur. |
| 3 | Construit le tableau |
| 4 | Construit le bloc contenant le tableau et le filtre |
| 5 | Ajoute une action pour créer un nouvel utilisateur |
| 6 | Affiche le bloc |
Nous passons exceptionnellement le filtre à buildTable pour construire la requête et éviter le contournement de filtre (filter hacking).
|
Afficher une fenêtre modale, puis la fermer et rafraîchir une partie du contenu actuel
Figure 3. Diagramme de séquence gérant l’action sur un tableau pour traiter une liste d’objets
Exemple de code pour fermer la fenêtre modale et rafraîchir la page actuelle
taackSaveService.saveThenDisplayBlockOrRenderErrors(EngineeringChangeRequest, (1)
new UiBlockSpecifier().ui { (2)
closeModalAndUpdateBlock { (3)
show buildShowProjects(ecr), {
menuIcon
ActionIcon.ADD,
Ecr2Controller.&projectsForm as MC, ecr.id
}
}
})
| 1 | Après l’appel d’une action impliquant la sauvegarde d’un objet dans une fenêtre modale, vous pouvez fermer la fenêtre modale et rafraîchir les éléments de la page en une seule action |
| 2 | saveThenDisplayBlockOrRenderErrors prend un UiBlockSpecifier en paramètre |
| 3 | closeModalAndUpdateBlock fermera d’abord la dernière fenêtre modale ouverte, puis appliquera la modification |
| 4 | Ici, le bloc portant le nom contenu dans ajaxBlockId sera mis à jour |
Lors de l’utilisation d’un ajaxBlock
TODO
-
Mettre à jour une partie d’une page
-
Afficher un objet avec un champ modifiable
-
Afficher un graphique
-
Exporter un tableau en CSV
-
Effectuer le rendu d’un bloc dans un PDF
-
Effectuer le rendu d’un bloc dans un e-mail
-
…