动态表单(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>

测试:

 

posted @ 2017-03-09 13:30  半生戎马,共话桑麻、  阅读(3003)  评论(0)    收藏  举报
levels of contents