Пример Struts DynaActionForm

Пример Struts DynaActionForm

Класс StrutsDynaActionForm - это интересная возможность, позволяющая создавать компонент формы динамически и декларативно. Он позволяет вам создать «виртуальный» компонент формы в файле конфигурации Struts вместо создания реального класса компонентов Java-компонента. Он может избежать создания множества простых, но утомительных классов bean-форм.

Например, DynaActionForm содержит свойство «имя пользователя».


    

Различия между «DynaActionForm» и «ActionForm»

  • DynaActionForm не требуется для создания реального класса Java (просто объявите в конфигурационном файле Struts), но ActionForm делает.

  • В DynaActionForm проверка формы реализована в классе Action, а ActionForm - в собственном классе.

Пример DynaActionForm

Struts <html:text> textbox example будет подвергнут рефакторингу для использования «DynaActionForm» вместо обычного «ActionForm».

Скачать пример Struts DynaActionForm -Struts-DynaActionForm-Example.zip

1. struts-config.xml

Объявите «DynaActionForm» в конфигурационном файле Struts и свяжите его с классом Action, как обычно.

struts-config.xml






    
        
        
              
        

    

    

            

        

            
            

        
    

    

2. действие

Переместите весь метод проверки формы в класс Action и получите свойство «DynaActionForm» с помощью метода «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");
        }

    }

}

Заключение

Вы должны пойти на DynaActionForm? Эта функция может сэкономить вам много времени на создание класса ActionForm, но у него есть ограничения, и иногда вам приходится использовать настоящий ActionForm для выполнения определенных задач. В среде больших проектов обслуживание всегда является первоочередным приоритетом, вам необходимо создать «стандарт формы», которому не следует следовать, нецелесообразно смешивать оба варианта, если у вас нет веских оснований для поддержки. Лично я редко использую DynaActionForm, в Eclipse IDE ActionForm не так уж сложно создать.