Exemple de Struts DynaActionForm

Exemple avec Struts DynaActionForm

La classe StrutsDynaActionForm est une fonctionnalité intéressante pour vous permettre de créer un bean formulaire de manière dynamique et déclarative. Il vous permet de créer un bean de formulaire «virtuel» dans le fichier de configuration Struts au lieu de créer une véritable classe de bean de formulaire Java. Cela peut vous éviter de créer de nombreuses classes de bean de forme simples mais fastidieuses.

Par exemple, un DynaActionForm contient une propriété "username".


    

La différence entre «DynaActionForm» et «ActionForm»

  • DynaActionForm n'est pas requis pour créer une vraie classe Java (il suffit de le déclarer dans le fichier de configuration Struts), mais ActionForm le fait.

  • Dans DynaActionForm, la validation de formulaire est implémentée dans la classe Action, tandis que ActionForm est implémentée dans sa propre classe.

Exemple DynaActionForm

LesStruts <html:text> textbox example seront refactorisés pour utiliser le "DynaActionForm" au lieu du "ActionForm" normal.

Télécharger l'exemple Struts DynaActionForm -Struts-DynaActionForm-Example.zip

1. struts-config.xml

Déclarez le «DynaActionForm» dans le fichier de configuration Struts et liez-le à la classe Action comme d'habitude.

struts-config.xml






    
        
        
              
        

    

    

            

        

            
            

        
    

    

2. action

Déplacez toute la méthode de validation de formulaire vers la classe Action et récupérez la propriété «DynaActionForm» via la méthode «get()».

UserAction.java

package com.example.common.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;

public class UserAction extends Action{

    public ActionForward execute(ActionMapping mapping,ActionForm form,
        HttpServletRequest request,HttpServletResponse response)
        throws Exception {

        DynaActionForm userForm = (DynaActionForm)form;

        ActionMessages errors = new ActionMessages();

        //do the form validation in action class
        if( userForm.get("username") == null ||
                         ("".equals(userForm.get("username")))) {

           errors.add("common.name.err",
                    new ActionMessage("error.common.name.required"));

        }

        saveErrors(request,errors);

        if(errors.isEmpty()){
            return mapping.findForward("success");
        }else{
            return mapping.findForward("failed");
        }

    }

}

Conclusion

Devriez-vous opter pour DynaActionForm? Cette fonctionnalité peut vous faire gagner beaucoup de temps pour créer la classe ActionForm, mais elle est limitée et vous devez parfois utiliser un véritable ActionForm pour effectuer certaines tâches. Dans un environnement de grands projets, la maintenance est toujours la première priorité à considérer, vous devez créer une «norme de formulaire» à suivre, il n'est pas pratique de mélanger l'utilisation des deux, sauf si vous avez une raison très solide de soutenir. Personnellement, j'utilise rarement le DynaActionForm, avec Eclipse IDE, le ActionForm n'est pas si difficile à créer après tout.