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