Struts DynaActionForm类是一个有趣的功能,它使您可以动态和声明性地创建表单bean。 它使您可以在Struts配置文件中创建“虚拟”表单Bean,而不是创建真正的Java表单Bean类。 它可以避免您创建许多简单但乏味的Form Bean类。
例如,一个DynaActionForm包含一个“用户名”属性。
<form-bean name="dynaUserForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String"/>
</form-bean>
“ DynaActionForm”和“ ActionForm”之间的区别
- DynaActionForm不需要创建真正的Java类(只需在Struts配置文件中声明),而ActionForm则需要。
- 在DynaActionForm中,表单验证是在Action类中实现的,而ActionForm是在其自己的类中实现的。
DynaActionForm示例
Struts <html:text>文本框示例将被重构为使用“ DynaActionForm”而不是常规的“ ActionForm”。
下载Struts DynaActionForm示例– Struts-DynaActionForm-Example.zip
1. struts-config.xml
在Struts配置文件中声明“ DynaActionForm”,然后像平常一样将其链接到Action类。
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<!--<form-bean
name="userForm"
type="com.mkyong.common.form.UserForm"/>
-->
<form-bean name="dynaUserForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String"/>
</form-bean>
</form-beans>
<action-mappings>
<action
path="/LoginPage"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/login.jsp"/>
<action
path="/Login"
type="com.mkyong.common.action.UserAction"
name="dynaUserForm"
>
<forward name="success" path="/pages/welcome.jsp"/>
<forward name="failed" path="/pages/login.jsp"/>
</action>
</action-mappings>
<message-resources
parameter="com.mkyong.common.properties.Common" />
</struts-config>
2.行动
将所有表单验证方法移至Action类,并通过“ get() ”方法获取“ DynaActionForm”属性。
UserAction.java
package com.mkyong.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并不难。
翻译自: https://mkyong.com/struts/struts-dynaactionform-example/
2575

被折叠的 条评论
为什么被折叠?



