Struts DynaActionForm-Beispiel

Beispiel für Struts DynaActionForm

Die Klasse StrutsDynaActionFormist eine interessante Funktion, mit der Sie eine Form Bean dynamisch und deklarativ erstellen können. Hiermit können Sie eine "virtuelle" Form-Bean in der Struts-Konfigurationsdatei erstellen, anstatt eine echte Java-Form-Bean-Klasse zu erstellen. Es kann vermieden werden, dass Sie viele einfache, aber langwierige Form-Bean-Klassen erstellen.

Beispielsweise enthält eine DynaActionForm eine Eigenschaft "Benutzername".


    

Der Unterschied zwischen "DynaActionForm" und "ActionForm"

  • DynaActionForm ist nicht erforderlich, um eine echte Java-Klasse zu erstellen (nur in der Struts-Konfigurationsdatei deklarieren), ActionForm jedoch.

  • In DynaActionForm wird die Formularüberprüfung in der Action-Klasse implementiert, während ActionForm in der eigenen Klasse implementiert wird.

DynaActionForm-Beispiel

DieStruts <html:text> textbox example sind Refactor, um die "DynaActionForm" anstelle der normalen "ActionForm" zu verwenden.

Laden Sie das Beispiel Struts DynaActionForm herunter -Struts-DynaActionForm-Example.zip

1. struts-config.xml

Deklarieren Sie das "DynaActionForm" in der Struts-Konfigurationsdatei und verknüpfen Sie es wie gewohnt mit der Action-Klasse.

struts-config.xml






    
        
        
              
        

    

    

            

        

            
            

        
    

    

2. Aktion

Verschieben Sie alle Formularüberprüfungsmethoden in die Aktionsklasse und rufen Sie die Eigenschaft "DynaActionForm" über die Methode "get()" ab.

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");
        }

    }

}

Fazit

Sollten Sie sich für DynaActionForm entscheiden? Diese Funktion spart Ihnen viel Zeit beim Erstellen der ActionForm-Klasse, hat jedoch einige Einschränkungen und manchmal müssen Sie eine echte ActionForm verwenden, um bestimmte Aufgaben auszuführen. In großen Projektumgebungen steht die Wartung immer an erster Stelle. Sie müssen einen „Formularstandard“ erstellen, um diesen zu befolgen. Es ist nicht praktisch, beide zu kombinieren, es sei denn, Sie haben einen sehr soliden Grund zur Unterstützung. Persönlich verwende ich die DynaActionForm selten, mit Eclipse IDE ist die ActionForm gar nicht so schwer zu erstellen.