Struts 学习笔记之ActionForm
Struts 学习笔记之ActionForm
Struts 中定义了一些JavaBeans ,主要是以ActionForm 为父类扩展开来的,如下图:
① org.apache.struts.action 包中
public abstract class ActionForm implements Serializable
public class DynaActionForm extends ActionForm implements DynaBean
② org.apache.struts.validator 包中
public class ValidatorForm extends ActionForm implements Serializable
public class DynaValidatorForm extends DynaActionForm
implements DynaBean, Serializable
③ org.apache.struts.validator 包中
public class ValidatorActionForm extends ValidatorForm implements Serializable
public class DynaValidatorActionForm extends DynaValidatorForm
implements DynaBean, Serializable
1 . ActionForm 中比较常用的两个方法是reset() 和validator() :
// 恢复ActionForm 属性的默认值,如把boolean 型设为true/false ,字符串设为null 。
public void reset ( ActionMapping mapping, HttpServletRequest request ) { }
// validate 只检查数据格式和语法,不检查数据是否符合业务逻辑。
public ActionErrors validate ( ActionMapping mapping, HttpServletRequest request ) { return (null); }
这两个方法的默认实现是不执行任何操作,我们可以重写这两个方法来实现相关逻辑。
注: 对于每个request ,控制器都会先调用ActionForm 的reset() 方法,然后表单数据组装到ActionForm 中。如ActionForm 在request 范围内,那么对于每个新的request 请求都会创建新的ActionForm 实例。新实例创建后,如果它的属性已经被初始化为默认值 ,那么接着再在reset() 方法中把属性设为默认值不是很有必要,这时可以让reset() 方法为空。
对于session 范围内的ActionForm ,同一ActionForm 实例会被多个请求共享,reset() 方法在这种情况下极为有用。
2 . 其中,ActionForm 需要我们创建一个formbean 类继承ActionForm ,在ActionForm 中可以定义一些property 和get/set 方法。
ActionForm 的property 必须声明然后才可以使用,不过在查询时我们常常需要输入一些查询条件,这些查询条件(property )其实不需要在formbean 中声明,这时可以使用Map 对象 来封装整个查询表单提交的数据,如下:
public class MapForm extends ActionForm {
private Map map = null;
public void setMap(Map map) {
this.map = map;
}
public Map getMap() {
return this.map;
}
// 增加查询条件(property )的get/set 方法,并把数据放到Map 中
public void setAttribute(String attributeKey, Object attributeValue) {
map.put(attributeKey, attributeValue);
}
public Object getAttribute(String attributeKey) {
Object keyValue = map.get(attributeKey);
return keyValue;
}
}
在页面上可以通过
来获取表单数据,这会调用getAttribute("id") 方法。
3 . 其中,Dyna 开头的动态ActionForm 不需要创建具体的ActionForm 类,只需通过Struts 的配置文件就可以完成ActionForm 的全部配置,如:
Dyna ActionForm ">
4 . 其中,含有validator 的ActionForm 用来进行表单验证,验证方法有两种。
① 在struts-config.xml 中设置action 的validate 属性为"true" (默认为"true" ),
type="com.cn.lively.action.UpdateUserAction"
name="userForm"
scope="request"
input="/jsp/updateUser.jsp"
cancellable="true"
validate="true" >
并且在相应的formbean 中重写其中的validate 方法,在validate 方法中实现自己的数据验证逻辑。
② 通过validation 框架进行验证,这分为两步:
⑴ 在struts-config.xml 中配置validation 插件,
value="/org/apache/struts/validator/validator-rules.xml ,
/WEB-INF/validation.xml " />
⑵ 配置formbean ,有下面两种方法:
㈠ 使自己的formbean 类继承含有validator 的ActionForm
public class UserForm extends ValidatorForm{
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
并配置struts-config.xml 文件:
userForm " type="com.cn.lively.formbean.UserForm ">
㈡ 使自己的formbean 类继承含有validator 的Dyna ValidatorForm
userForm " type="org.apache.struts.validator.Dyna ValidatorForm ">
⑶ 配置validation.xml 文件:
注: 注意 validation.xml 文件中的userForm 是struts-config.xml 文件中formbean 的名字。
关于arg 的几个属性如下:
bundle :指定资源文件名,如不指定,则从默认资源文件 中读取
key :从资源文件 ActionResources.properties 中得到的值
resource :key 所指定的信息是否来自外部的资源文件,默认为true 。如果为true ,则代表key 为buddle 属性所指定的资源文件中的key 。
position ,这个arg 中的值用来替换信息中的哪一部分, 需要替换的部分以{n} 标志。
5 . 关于ValidatorForm/ DynaValidatorForm 与ValidatorActionForm/ DynaValidatorActionForm 之间的区别
对于一个actionform ,可以被多个action 所使用,而每个action 可能需要的验证字段都不一样,而validation.xml 中配置的验证方式(如
position="1" />
maxlength
10
注: 注意validation.xml 文件中的/createUser 和/updateUser 是struts-config.xml 文件中action 的path 路径。
如果我们查看struts 源码,可以很清楚的看到ValidatorForm/ DynaValidatorForm 与ValidatorActionForm/ DynaValidatorActionForm 之间的区别
ValidatorForm 中的方法
* @return validation key - the form element's name in this case
public String getValidationKey(ActionMapping mapping,
HttpServletRequest request) {
return mapping.getAttribute(); // 返回formbean 的名字
}
本文深入探讨了Struts框架中的ActionForm组件,包括其继承结构、常用方法、动态ActionForm配置、表单验证机制及ValidatorForm与ValidatorActionForm的区别。
180

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



