Struts DynaActionForm 动态ActionForm出现的主要功能是为了防止ActionForm的膨胀,全部代码由Struts自动生成,不用手工写多个ActionForm.
DynaActionForm 动态ActionForm 与普通ActionForm 并没有太大的区别。动态ActionForm 避免了书写ActionForm,但配置变得更复杂了。而普通ActionForm 使解析请求参数变得更直观。
- 编写表单
<%@ page language="java" pageEncoding="gb2312"%> <form action="login.do" method="post"> username:<input type="text" name="username" /><br/> userpass:<input type="text" name="userpass" /><br/> <input type="submit" value="login" /> </form>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<!-- 配置动态表单BEAN -->
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String" />
<form-property name="userpass" type="java.lang.String" />
</form-bean>
</form-beans>
<!-- 结束配置 -->
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="loginForm"
name="loginForm"
path="/login"
scope="request"
type="cn.net.royakon.action.LoginAction">
<forward name="ok" path="/ok.jsp" />
<forward name="fail" path="/index.jsp" />
</action>
</action-mappings>
<message-resources parameter="cn.net.royakon.ApplicationResources" />
</struts-config>
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm loginForm = (DynaActionForm) form;
// 通过 loginForm 取得已配置的动态表单Bean的值
String username = loginForm.getString("username");
String userpass = loginForm.getString("userpass");
if (username.equals(userpass)) {
request.setAttribute("result","ok");
return mapping.findForward("ok");
}
return mapping.findForward("fail");
}
DynaActionForm 到底好不好用,仁者见仁,智者见智,虽然提高了代码的自动生成能力,但是又带来了复杂性方面的代价。如何取舍就看你了!我个人不是很喜欢这个功能。
Categories: 网页编程