您的位置:首页 > 编程语言 > Java开发

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

2012-11-26 20:38 387 查看
一个网站中会有许多的表单以供使用者填写资料,越大型的网站越需要更多的 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA