Struts(四)ActionForm

在Struts中ActionForm也是一个很重要的组件。他的主要作用就是收集数据。

1、ActionForm的作用

ActionForm 用来收集表单中的数据,可以将其看作是模型和视图的中介,它负责保存视图中的数据供模型或者视图使用。同时ActionForm 具有的过滤保护的作用,可以在将ActionForm数据发送到 Action 处理之前进行验证。

2、ActionForm的执行时间

ActionForm 是与一个或多个 ActionConfig 关联的JavaBean,在相应的 action 的 execute 方法被调用之前,ActionForm 会自动利用请求参数来填充自己(初始化属性)。

3、定义自己的ActionForm

ActionForm 是一个抽象类,必须通过继承来实现自己的类。在ActionForm中需要定义要收集的属性名,即表单中的信息,并为每个属性设置getter和setter方法,举个例子:

Jsp文件:

<body> <form action="login.do" method="post"> 用户名:<input type="text" name="username"><br/> 密 码:<input type="password" name="password"><br/> <input type="submit" name="login"> </form> </body>


则对应的自己的ActionForm为:

package wh; import org.apache.struts.action.ActionForm; publicclass LoginActionForm extends ActionForm { private String username; private String password; //注意get和set后的内容与表单中的name相同 public String getUsername() { returnusername; } publicvoid setUsername(String username) { this.username = username; } public String getPassword() { returnpassword; } publicvoid setPassword(String password) { this.password = password; } }


需要注意的是,因为ActionForm利用属性的 getter 和 setter 方法来实现初始化,所以getUsername中的Username(首字母可大写)应该与表单中name="username"相同。

4、ActionForm的验证

初始化完毕后,在ActionServlet调用Action类前,ActionForm 的 validate() 方法被调用,我们可以在其中来检查请求参数的正确性和有效性:

Public ActionErrors validate(ActionMapping mapping,   ServletRequest request)   

Public ActionErrors validate(ActionMapping mapping,   HttpServletRequest request)   

我们需要在自己的ActionForm bean里覆盖validate()方法,并在配置文件里设置<action>元素的validate为true。调用validate()后,如果返回的ActionErrors不是null,则ActinForm会根据错误关键字将ActionErrors存储在请求属性列表中。   

如果返回的不是null,而且长度大于0,则根据错误关键字将实例存储在请求的属性列表中,然后ActionServlet将响应转发到配置文件<action>;元素的input属性所指向的目标。   

如果需要执行特定的数据有效性检查,最好在Action类中进行这个操作,而不是在ActionForm类中进行。

验证返回null之后ActionForm 将被作为参数传给 action 的 execute 方法以供使用。

5、ActionForm的生命周期

ActionForm bean 的生命周期可以设置为 session(缺省)和 request,当设置为 session 时,注意在 reset() 方法中将所有的属性重新设置为初始值。

public void reset(ActionMapping mapping,HttpServletRequest request)   

public void reset(ActionMapping mapping,ServletRequest request)   

6、ActionForm的配置:

Struts框架假设用户在应用程序中为每个表单都创建了一个ActionForm bean,对于每个在struts-config.xml文件中定义的bean,框架在调用Action类的perform()方法之前会在相关联的关键字下,检查用于适当类的bean实例,没有可用的bean,它就会自动创建一个新的bean,对于请求中每个与bean属性名称对应的参数,Action调用相应的set方法设置。当Action perform()被调用时,最新的ActionForm bean传送给它,参数值就可以立即使用了。

上面例子的Form bean的配置举例:

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="wh.LoginActionForm"></form-bean> </form-beans> <action-mappings> <action path="/login" type="wh.LoginAction" name="loginForm" scope="request" validate="true" input="/error.jsp" > <forward name="success" path="/success.jsp"></forward> <forward name="error" path="/error.jsp"></forward> </action> </action-mappings> </struts-config>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值