1.引入动态Form
在前面我们已经知道,ActionForm是用来获取表单提交过来的信息。而为了具体的处理,我们必须写一个ActionForm的子类作为表单数据的存储bean。其实,我们也可以把数据填充到struts自带的动态From。这样就可以不必写ActionForm,但是却要为这个DynaActionFrom写好配置文件。
2.实例演示:新建项目dynaForm
reg.jsp页面内容如下:
<form action="<%=request.getContextPath()%>/reg.do" method="get">
username:<input type="text" name="username"/><br>
password:<input type="password" name="password"><br>
age:<input type="text" name="age"><br>
birthday:<input type="text" name="birthday"><br>
<input type="submit" value="confirm">
</form>
web.xml配置内容如下:
和以前的配置一样,主要配置ActionServlet总控
struts-config.xml主要配置内容:
<struts-config>
<form-beans>
<form-bean name="dyna" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />
<form-property name="age" type="java.lang.Integer" />
<form-property name="birthday" type="java.sql.Date" />
</form-bean>
</form-beans>
<action-mappings>
<action path="/reg" type="com.asm.RegAction" name="dyna">
<forward name="suc" path="/suc.jsp"></forward>
</action>
</action-mappings>
</struts-config>
分析此配置:<form-bean>下的type不再是我们自己写的Form,而是struts的DyanActionForm。后面的<form-property>是对这个动态From进行的属性配置。注意的是里面的type属性必须是一个完整的包名,不能是简单类型(比如int类型,必须写成Integer)。理解这个配置:把DynaActionForm想成就是我们自己写的ActionForm,而<form-property>用来设定这个bean的属性就行了。
RegAction内容如下:
package com.asm;
public class RegAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm dyna = (DynaActionForm) form;
String username = (String) dyna.get("username");
String password = dyna.getString("password");
int age = (Integer) dyna.get("age");
java.sql.Date birthdaySql = (java.sql.Date) dyna.get("birthday");
java.util.Date birthday = birthdaySql;
System.out.println("success:");
System.out.println("usrename=" + username + "/t password=" + password
+ "/t age=" + age + "/t birthday=" + birthday);
return mapping.findForward("suc");
}
}
说明:转成DynaActionForm后对象后,它调用get方法返回的是一个对象Object,由于bean中本身存储的是我们前面在<form-property>中写的对象类型。所以它进行强制转换成我们所写的对象类型。 补充说明:关于它的其它操作,可以参照DynaActionForm类的Api
reg.jsp内容如下:
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<html>
<body>
${dyna.map.username}
${dyna.map.password}
${dyna.map.birthday}
</body>
</html>
最后,我们选择无论输入任何信息都会跳到此reg.jsp页面,在reg.jsp页面中我们利用el表达式来获取存储的dyna对象的相关属性,需要注意的是这里引用dyna对象,名字来源:
<form-bean name="dyna" type="org.apache.struts.action.DynaActionForm">中的name属性值。而map是必须的,因为动态form会的对象属性会被存成一个map形式,所以加上map引用。至于为什么要用map,这里只须记住,动态form的属性访问必须加map就行,而至于原因可以参考文档或查阅相关资料。非动态form不需要加map,可以在前面实例的基础上加上一些代码测试