老習慣,直接代碼說話
首先是web.xml檔案
<?xml version="1.0" encoding="UTF-8"?><br /><web-app xmlns="http://java.sun.com/xml/ns/javaee"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"<br />xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><br /><servlet><br /><servlet-name>action</servlet-name><br /><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><br /><init-param><br /><param-name>config</param-name><br /><param-value>/WEB-INF/struts-config.xml</param-value><br /></init-param><br /><init-param><br /><param-name>debug</param-name><br /><param-value>3</param-value><br /></init-param><br /><init-param><br /><param-name>detail</param-name><br /><param-value>3</param-value><br /></init-param><br /><load-on-startup>0</load-on-startup><br /></servlet><br /><servlet-mapping><br /><servlet-name>action</servlet-name><br /><url-pattern>*.do</url-pattern><br /></servlet-mapping></p><p><welcome-file-list><br /><welcome-file>dynaActionFormTest.jsp</welcome-file><br /></welcome-file-list><br /></web-app>
然後是動態ActionForm的測試頁面----dynaActionFormTest.jsp
<%@ page language="java" pageEncoding="UTF-8"%></p><p><h2>動態ActionForm測試</h2></p><p><form action="dynaActionFormTest.do" method="POST"><br />姓名:<input type="text" name="name" /><br/><br /> 年齡:<input type="text" name="age" /><br/><br /> <input type="submit" value="測試" /><br /></form></p><p><%--<br />=====================================================================================================<br />動態ActionForm是為了避免標準ActionForm膨脹而設計的<br />使用動態ActionForm可以獲得標準ActionForm的所有功能<br />=====================================================================================================<br />動態ActionForm的驗證通常採用動態驗證架構,即validate.xml檔案,而不使用它的validate()方法<br />動態ActionForm其實是把頁面中的html元素的名字和值放到了map中,所以通過get方法可以取出相應的值<br />動態ActionForm採用EL運算式的輸出方式為${dynabean.map.prop}形式<br />比如我們在Action轉向後的頁面中使用${dynaActionForm.map.age}輸出age值<br />這裡的dynaActionForm對應的是struts-config.xml中的<action>中的name值<br />=====================================================================================================<br />Struts對ActionForm的自動搜集過程,如下<br />將頁面資料放到Map中,其中Map中的key為頁面中的名稱,Map中的Value為頁面中的value值<br />然後調用BeanUtils.setProperties方法,將Map中的值逐個設定到ActionForm執行個體上<br />對於ActionForm中的每個屬性,根據類型調用相應的Converter<br />然後調用相應的convert()方法,將相應的字串轉換成ActionForm中指定的類型<br />=====================================================================================================<br />--%>
接著是示範如何擷取DynaActionForm中的值的頁面----dynaActionFormResult.jsp
<%@ page language="java" pageEncoding="UTF-8"%></p><p><h2>測試動態ActionForm的結果</h2></p><p>姓名:${dynaActionForm.map.name}<br/><br />年齡:${dynaActionForm.map.age}
然後是Struts1.x的核心設定檔----struts-config.xml
<?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE struts-config PUBLIC<br />"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"<br />"http://struts.apache.org/dtds/struts-config_1_2.dtd"><br /><struts-config><br /><form-beans><br /><!-- 在struts-config.xml檔案中定義動態ActionForm的方法如下所示 --><br /><!-- <form-property>用來收集頁面資料 --><br /><!-- name屬性要與頁面表單<input>的name一致 --><br /><!-- type屬性值需要給定完整路徑 --><br /><!-- initial屬性用來設定屬性的初值 --><br /><!-- 如果這裡聲明的屬性是數組的話,還可以用size屬性聲明數組長度 --><br /><form-bean name="dynaActionForm" type="org.apache.struts.action.DynaActionForm"><br /><form-property name="name" type="java.lang.String"/><br /><form-property name="age" type="java.lang.Integer"/><br /></form-bean><br /></form-beans></p><p><action-mappings><br /><action path="/dynaActionFormTest"<br />type="com.jadyer.struts.action.DynaActionFormTestAction"<br />name="dynaActionForm"<br />scope="request"><br /><forward name="success" path="/dynaActionFormResult.jsp"/><br /></action><br /></action-mappings><br /></struts-config>
最後是用到的Action類----DynaActionFormTestAction.java
package com.jadyer.struts.action;</p><p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p><p>import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.action.DynaActionForm;</p><p>public class DynaActionFormTestAction extends Action {<br />@Override<br />public ActionForward execute(ActionMapping mapping, ActionForm form,<br />HttpServletRequest request, HttpServletResponse response)<br />throws Exception {<br />DynaActionForm daf = (DynaActionForm)form;</p><p>String name = (String)daf.get("name");<br />Integer age = (Integer)daf.get("age");</p><p>System.out.println("name=" + name);<br />System.out.println("age=" + age);</p><p>return mapping.findForward("success");<br />}<br />}