使用动态ActionForm

Struts 的ActionForm 虽然比较简单,但也是异常烦琐的类。说简单,是因为每个类的写法非常简单,只需要为每个表单域提供对应的setter 和getter 方法即可。说烦琐,是因为必须大量书写这种简单的类。
好在Struts 提供了动态ActionForm ,通过使用动态ActionForm ,可以完全不用书写ActionForm ,只需在struts-config.xml 文件中配置即可。
一、配置动态ActionForm
所有的动态ActionForm 的实现类都必须是org.apache.struts.action.DynaActionForm类,或者是它的子类。
使用动态ActionForm 与前面不同的是:因为系统不清楚动态ActionForm 的属性,所以必须在配置文件中配置对应的属性。可以使用form-property 元素来配置动态ActionForm 的属性。
下面是使用动态ActionForm 的struts-config.xml 文件的源代码:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Struts 配置文件的文件头,包含DTD 等信息 -->
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<!-- Struts 配置文件的根元素 -->
<struts-config>
<form-beans>
<!-- 配置动态ActionForm,动态Aciton 必须使用DynaActionForm -->
<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
<!-- 配置ActionForm的属性: username -->
<form-property name="username" type="java.lang.String" />
<!-- 配置ActionForm的属性: pass -->
<form-property name="pass" type="java.lang.String" />
</form-bean>
</form-beans>
<!-- 配置全局Forward -->
<global-forwards>
<forward name="error" path="/WEB-INF/jsp/error.jsp" />
</global-forwards>
<!-- 配置action 映射 -->
<action-mappings>
<!-- 配置Action的path , type , name 属性 -->
<action path="/login" type="lee.LoginAction" name="loginForm">
<!-- 配置两个局部Forward -->
<forward name="welcome" path="/WEB-INF/jsp/welcome.jsp" />
<forward name="input" path="/login.jsp" />
</action>
</action-mappings>
<!-- parameter属性确定资源文件的文件名,默认在WEB-INF/classes下查找文件 -->
<message-resources parameter="messages" />
</struts-config>

从上面的配置文件可看出,动态ActionForm 的配置必须增加form-property 元素,每个属性必须对应一个form-property元素。
form-property元素包含两个属性。
• name: 属性的名字,必须与JSP 页面的表单域的名字相同。
• type: 属性的类型。
二、使用动态ActionForm
动态ActionForm 同样用于封装用户请求参数,但该ActionForm 没有各属性的getter及setter 方法,因此无法调用对应的getter 方法来解析请求参数。
幸好DynaActionForm 提供了多个重载的getter 方法用于获取请求参数,下面的
Action 使用DynaActionForm,该Action 的源代码如下:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
//Action 必须继承Action 类
public class logicAction extends Action {
// 必须重写该核心方法,该方法actionForm 将表单的请求参数封装成值对象
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 将ActionForm强制类型转换为DynaActionForm
DynaActionForm loginForm = (DynaActionForm) form;
// 从ActionForm中解析出请求参数: username
String username = (String) loginForm.get("username");
// 从ActionForm中解析出请求参数: password
String pass = (String) loginForm.get("pass");
// 后面的处理与前一个示例的Action 相同。
...
}
}

使用动态ActionForm 时,请求参数必须使用DynaActionForm的getter 方法获取。DynaActionForm 的getter 方法主要有如下三个。
• Object get(java.lang.String name): 根据属性名返回对应的值。
• Object get(java.lang.String name, int index): 对于有多个重名表单域的情况, Struts将其当成数组处理,此处根据表面域名和索引获取对应值。
• Object get(java.lang.String name, java.lang.String key): 对于使用Map 属性的情况,根据属性名及对应key. 获取对应的值。
使用动态ActionForm 的目的是为了减少代码的书写量。但有些IDE 工具可以自动生成ActionForm. 则可以使用普通ActionForm。
动态ActionForm 与普通ActionForm 并没有太大的区别。动态ActionForm 避免了书写ActionForm,但配置变得更复杂了。而普通ActionForm 使解析请求参数变得更直观。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值