Fonctionnement de @ModelAttribute ?
Bonjour à tous,
Est-ce que quelqu'un pourrait m'expliquer le fonctionnement de l'annotation @ModelAttribute et comment l'utiliser (bonnes pratiques) ?
Pour moi une méthode annotée @ModelAttribute est une méthode qui est appelée avant l'appel de la méthode @RequestMapping.
Il permet notamment de faire passer un objet à une vue afin de populer un formulaire.
J'ai l'impression que pour le retour d'un formulaire, il récupère l'objet du formulaire par cet intermédiaire, et lui affecte les nouvelles valeurs... Est-ce correct ?
Soit la signature suivante (qui est tiré au hasard... de mon code ^^) :
Code:
1 2
| @ModelAttribute("requirement_details")
public RequirementDetails populateRequirementDetails(HttpServletRequest servletRequest) |
Dans cette méthode je renvois "new RequirementDetails()" si la méthode de la requete est "POST" (retour d'un formulaire) pour éviter d'effectuer une requête supplémentaire en base.
Mon objet "RequirementDetails" possède une collection de "Compliance".
Dans que la liste est vide à l'affichage du formulaire ET à sa soumission, tout se passe bien.
Par contre lorsque la liste possède des éléments à l'affichage et que j'en supprime avant la soumission, j'ai une erreur
Citation:
Invalid property 'compliancesList[0]' [...] Cannot get element with index 0 from Set of size 0, accessed using property path 'compliancesList[0]'] with root cause
On dirait qu'il fait un "setComplianceList[0] = <item de la liste>" au lieu de "setComplianceList = <ma nouvelle liste>"...
Et moi ça m'embête :?