从struts2回到struts的学习--DynaActionForm(不用手写actionForm.java)

一个网站中会有许多的表单以供使用者填写资料,越大型的网站越需要更多的 ActionForm 物件来应付表单的取值,对於一些表单来说,ActionForm只是单纯的设值、取值行为,如果为每一个表单撰写一个ActionForm,那么会是一件单纯重复且无趣的行为,而且在维护上会更加困难。

对於一些单纯的表单来说,您可以使用DynaActionForm类别,您只要在struct-config.xml中设定好相关的设定,就可以自动生成 ActionForm物件,这么一来您可以集中在struct-config.xml中管理表单物件,也可以省去不是编码与编译的工夫。

下面是使用DynaActionForm的一个例子:
  • struts-config.xml
    <form-beans> 
        <form-bean 
            name="userForm" 
            type="org.apache.struts.action.DynaActionForm"> 
            <form-property 
                name="name" 
                type="java.lang.String" 
                initial="nobody"/> 
            <form-property 
                name="password" 
                type="java.lang.String" 
                initial="nopass"/> 
        </form-bean> 
    </form-beans>

    <action-mappings>
        <action 
            path="/LoginAction" 
            type="onlyfun.caterpillar.LoginAction" 
            name="userForm"> 
            <forward 
                name="helloUser" 
                path="/WEB-INF/pages/hello.jsp"/> 
            ....
        </action> 
    </action-mappings>
    ....

注意在<form-bean>的type属性,设定使用 org.apache.struts.action.DynaActionForm,而Form的属性则使用<form-property> 标签来设定,DymaActionForm的type属性希望得到的一个Java类别名称,所以对於基本资料型态如int,必须以 java.lang.Integer作为Wrapper类别包装。

ActionForm类别的reset()方法预设什么事都不作,除非您重新定义它,DynaActionForm则预设会将所有的资料重设为Java型态的预设值,例如数字重设为0,而Object则重设为null,您也可以使用initial属性来设定重设的值。

DynaActionForm同样也被当作参数传递给execute()方法,DynaActionForm使用Map型态的方法来取值,下面的 Action类别示范了如何取得DynaActionForm的属性值:
  • LoginAction.java
package onlyfun.caterpillar;
 
import javax.servlet.http.*; 
import org.apache.struts.action.*; 

public class LoginAction extends Action { 
    public ActionForward execute(ActionMapping mapping, 
                                ActionForm form, 
                                HttpServletRequest request, 
                                HttpServletResponse response) 
                                   throws Exception { 
        DynaActionForm dynaForm = (DynaActionForm) form; 
        String name = (String) dynaForm.get("name"); 
        String password = (String) dynaForm.get("password"); 
        ....
    } 
}


DynaActionForm预设并没有为validate()方法提供任何行为,如果需要的话,您可以透过继承DynaActionForm来定义 validate()方法,并於<form-bean>的type中设定为您所撰写的类别。

DynaActionForm支持以下数据类型:

  • java.lang.BigDecimal
  • java.lang.BigInteger
  • boolean and java.lang.Boolean
  • byte and java.lang.Byte
  • char and java.lang.Character
  • java.lang.Class
  • double and java.lang.Double
  • float and java.lang.Float
  • int and java.lang.Integer
  • long and java.lang.Long
  • short and java.lang.Short
  • java.lang.String
  • java.sql.Date  不是util.Date
  • java.sql.Time
  • java.sql.Timestamp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值