Пример 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 не так уж сложно создать.