Spring MVC - SimpleFormController


Objectifs

  • Comprendre le processus de traitement d’une requête par le contrôleur SimpleFormController.
  • Comprendre les méthodes utilisées par le contrôleur SimpleFormController.
Processus de traitement d’une requête

Nous décrivons ci-dessous le cycle de traitement d’une requête  par le  contrôleur SimpleFormContoller. Après le submit du formulaire le form bean envoyé vers le contrôleur passe par plusieurs méthodes pour être traité.

simpleformcontrollerprocess.jpg

  1. En recevant une requête le SimpleFormController teste, isFormSubmission(), si la requête est de type POST. Si c’est le cas, une commande sera créée formBackingObject().  
  2. Ensuite un binder sera crée et initialisé initBinder().
  3. Le SimpleFormController teste par la suite, isBindOnNewForm(), si un post traitement spécifique doit être exécuté.
  4. Tester, isSessionForm(), si le formulaire doit être récupéré de la session.
  5. Initialiser par la suite le formulaire par les reference data.
Validation


validation.jpg
  1. Le premier niveau de validation réalisé par spring MVC est au niveau de la méthode initBinder() qui initialise le form bean créé et vérifie s’il y  a des erreurs de conversion …
  2. Ensuite la méthode  isValidateOnBinding() est appelée pour déterminer si le form bean, au moment du binding des données, doit être validé par un validator spécifique, par défaut, cette méthode retourne TRUE, pour modifier la valeur de retour, appelez  le setter setValidateOnBinding() dans le constructeur du contrôleur ou mettez à FALSE le paramètre validateOnBinding dans la configuration du contrôleur.
  3. La méthode suppressValidation() est appelée pour déterminer si le form bean créé doit être validé par un validator spécifique; par défaut cette méthode return FALSE.
  4. Enfin la méthode onBindAndValidate() est appelée, par défaut cette méthode ne fait rien, mais c’est la dernière chance, si vous voulez encore faire des validations.
  5. Après la validation du form bean, la méthode processFormSubmission() est appelée. Elle vérifie la liste des erreurs contenu dans l'objet Errors mis à jour par l’appel des méthodes onBind(), validateOnBinding(), onBindAndValidate(). Si cette liste contient des messages d'erreur, la méthode showForm() est appelée. Si non la méthode onSubmit() est appelée.
Méthodes 

Nous allons voir, maintenant en détail, les méthodes utilisées par SpringFormController :

isFormSubmission(): utilisée pour tester si la requête HTTP est de type POST.

formBackingObject(): permet de créer un form object. Le form object créé est celui défini dans la configuration du contrôleur par la proprety commandClass ou par le constructeur du formulaire par la méthode setCommandClass().

initBinder(): cette méthode est appelée après la création de l’object form et du data binder. Par défaut, cette méthode ne fait rien, elle doit être override pour définir des PropertyEditors  spécifique lors du binding des données.

setBindOnNewForm(): permet de modifier la propriété bindOnNewForm qui est par défaut à FALSE.

onBindOnNewForm(): est appelée si bindOnNewForm est à TRUE, cette méthode permet le binding des paramètres de la requête avec le formulaire.

isSessionForm(): détermine si le contrôleur doit chercher le form dans la session et d’enregistrer le formulaire en session entre l’affichage du form et le submit.

referenceData(): cette méthode permet, avant d’afficher le formulaire, de l’initialiser, si c’est nécessaire, avec des objets tels que par exemple une liste  des valeurs d’un comboBox ….

Submit du fromulaire: le SimpleFormController dispose de 4 méthodes pour traiter le formulaire après sa validation. Ces méthodes sont : onSubmit(request, response, formBean, errors), onSubmit(formBean, errors), onSubmit(formBean), doSubmitAction(formBean). Comme vous l’avez remarqué la différence entre ces méthodes c’est le nombre d’argument. Chaque méthode appel la méthode qui a un argument de moins.

Exemple : onSubmit(formBean, errors) appel la méthode onSubmit(formBean), ceci permet d’utiliser la méthode avec le nombre exact de paramètres nécessaires.

Références
Expert Spring MVC and Web Flow by Seth Ladd, Darren Davison, Steven Devijver, and Colin Yates.
Spring in Action by Graig Walls Ryan Breidenbach

Aucun commentaire: