动态表单(DynamicForm)
当表单类的属性个数和类型不能确定的时候, 就可以使用动态表单来解决
普通表单和动态表单的区别:
1. 普通表单ActionForm, 首先要定义一个这样的类, 然后配置到struts-config.xml中
2. 动态表单完全依赖于反射机制, 所以不需要创建表单类, 直接在struts-config.xml中配置即可.
项目结构:
index.jsp:
<jsp:forward page="/WEB-INF/register.jsp" />
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
struts-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<!-- 动态表单的属性在这里配置 -->
<form-beans>
<form-bean name="userForm" 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="email" type="java.lang.String" />
<!-- 动态表单的意思是可以动态地在这里配置属性 -->
<form-property name="telephone" type="java.lang.String" />
</form-bean>
</form-beans>
<action-mappings>
<action path="/register" name="userForm"
parameter="flag" type="com.itcast.struts1.action.RegisterAction">
<forward name="registerOk" path="/WEB-INF/registerOk.jsp" />
</action>
</action-mappings>
</struts-config>
register.jsp:
<body>
<h3>用户注册</h3>
<form action="<%=basePath%>register.do?flag=register" method="post">
u: <input type="text" name="username"/><br/>
p: <input type="password" name="password"/><br/>
e: <input type="text" name="email"/><br/>
<!-- 动态表单的意思是可以在这里动态添加属性 -->
t: <input type="text" name="telephone"/><br/>
<input type="submit" value="Register"/>
</form>
</body>
RegisterAction.java:
public class RegisterAction extends DispatchAction {
public ActionForward register(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
DynaActionForm dynaActionForm = (DynaActionForm) form;
String username = (String) dynaActionForm.get("username");
String password = (String) dynaActionForm.get("password");
String email = (String) dynaActionForm.get("email");
// 动态表单的意思是可以在这里动态添加属性
String telephone = (String) dynaActionForm.get("telephone");
System.out.println("username: " + username + " | "
+ "password: " + password + " | "
+ "email: " + email
+ "telephone: " + telephone);
return mapping.findForward("registerOk");
}
}
registerOk.jsp:
<h3>恭喜您! 注册成功!</h3>
测试: