You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by la...@apache.org on 2005/11/29 05:21:42 UTC
svn commit: r349623 - in /struts/apps/trunk/examples: project.xml
src/java/org/apache/struts/webapp/exercise/EnhancedDynaFormAction.java
src/webapp/WEB-INF/exercise/struts-config.xml
src/webapp/exercise/enhanced-dynabean.jsp src/webapp/exercise/index.html
Author: laurieh
Date: Mon Nov 28 20:21:33 2005
New Revision: 349623
URL: http://svn.apache.org/viewcvs?rev=349623&view=rev
Log:
Adding a page of tests for the enhanced dyna form functionality.
Added:
struts/apps/trunk/examples/src/java/org/apache/struts/webapp/exercise/EnhancedDynaFormAction.java
struts/apps/trunk/examples/src/webapp/exercise/enhanced-dynabean.jsp
Modified:
struts/apps/trunk/examples/project.xml
struts/apps/trunk/examples/src/webapp/WEB-INF/exercise/struts-config.xml
struts/apps/trunk/examples/src/webapp/exercise/index.html
Modified: struts/apps/trunk/examples/project.xml
URL: http://svn.apache.org/viewcvs/struts/apps/trunk/examples/project.xml?rev=349623&r1=349622&r2=349623&view=diff
==============================================================================
--- struts/apps/trunk/examples/project.xml (original)
+++ struts/apps/trunk/examples/project.xml Mon Nov 28 20:21:33 2005
@@ -9,6 +9,40 @@
<description>Struts examples web application</description>
<shortDescription>Struts webapp</shortDescription>
- <dependencies/>
+ <dependencies>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ <version>2.1_3</version>
+ <url>http://cglib.sourceforge.net/</url>
+ <properties>
+ <optional>true</optional>
+ <war.bundle>true</war.bundle>
+ <cactus.bundle>true</cactus.bundle>
+ </properties>
+ </dependency>
+
+ <dependency>
+ <groupId>jstl</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.0.6</version>
+ <properties>
+ <optional>true</optional>
+ <war.bundle>true</war.bundle>
+ <cactus.bundle>true</cactus.bundle>
+ </properties>
+ </dependency>
+
+ <dependency>
+ <groupId>taglibs</groupId>
+ <artifactId>standard</artifactId>
+ <version>1.0.6</version>
+ <properties>
+ <optional>true</optional>
+ <war.bundle>true</war.bundle>
+ <cactus.bundle>true</cactus.bundle>
+ </properties>
+ </dependency>
+ </dependencies>
</project>
Added: struts/apps/trunk/examples/src/java/org/apache/struts/webapp/exercise/EnhancedDynaFormAction.java
URL: http://svn.apache.org/viewcvs/struts/apps/trunk/examples/src/java/org/apache/struts/webapp/exercise/EnhancedDynaFormAction.java?rev=349623&view=auto
==============================================================================
--- struts/apps/trunk/examples/src/java/org/apache/struts/webapp/exercise/EnhancedDynaFormAction.java (added)
+++ struts/apps/trunk/examples/src/java/org/apache/struts/webapp/exercise/EnhancedDynaFormAction.java Mon Nov 28 20:21:33 2005
@@ -0,0 +1,64 @@
+package org.apache.struts.webapp.exercise;
+
+import java.util.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.DynaActionForm;
+
+public class EnhancedDynaFormAction extends Action {
+ public ActionForward execute(ActionMapping actionMapping,
+ ActionForm actionForm,
+ HttpServletRequest httpServletRequest,
+ HttpServletResponse httpServletResponse)
+ throws Exception {
+
+ System.out.println("form: "+actionForm);
+ DynaActionForm f = (DynaActionForm) actionForm;
+
+ // regular properties
+ f.set("name", "name");
+ f.set("nameTwo", "nameTwo");
+ f.set("name_three", "name_three");
+ f.set("_nameFour", "_nameFour");
+
+ // unusually named properties
+ f.set("", "empty");
+ f.set("a", "short");
+ f.set("A", "SHORT");
+ f.set("ALLCAPS", "ALLCAPS");
+ f.set("LEADINGcaps", "LEADINGcaps");
+ f.set("aPoorCapitalization", "aPoorCapitalization");
+ f.set("a1PoorCapitalization", "a1PoorCapitalization");
+ f.set("AnotherPoorCapitalization", "AnotherPoorCapitalization");
+ f.set("1NumericFirstChar", "1NumberFirstChar");
+ f.set("with space", "with space");
+
+ // various different types
+ f.set("intVal", new Integer(1));
+ f.set("integerVal", new Integer(1));
+ f.set("dateVal", new Date());
+ f.set("localeVal", Locale.US);
+
+ // indexed/mapped properties
+ Map strMap = new HashMap();
+ strMap.put("one", "valOne");
+ strMap.put("two", "valTwo");
+ strMap.put("three", "valThree");
+
+ String[] strArray = (String[]) strMap.values().toArray(new String[0]);
+ List strList = Arrays.asList(strArray);
+
+ f.set("stringArray", strArray);
+ f.set("stringList", strList);
+ f.set("stringMap", strMap);
+
+ httpServletRequest.setAttribute("DynaTest", f);
+
+ return actionMapping.findForward("success");
+ }
+}
Modified: struts/apps/trunk/examples/src/webapp/WEB-INF/exercise/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/apps/trunk/examples/src/webapp/WEB-INF/exercise/struts-config.xml?rev=349623&r1=349622&r2=349623&view=diff
==============================================================================
--- struts/apps/trunk/examples/src/webapp/WEB-INF/exercise/struts-config.xml (original)
+++ struts/apps/trunk/examples/src/webapp/WEB-INF/exercise/struts-config.xml Mon Nov 28 20:21:33 2005
@@ -11,6 +11,37 @@
<form-property name="country" type="java.lang.String" />
<form-property name="page" type="java.lang.String" />
</form-bean>
+ <!-- Enhanced form bean -->
+ <form-bean name="DynaTest" enhanced="true" type="org.apache.struts.action.DynaActionForm">
+ <!-- regular properties -->
+ <form-property name="name" type="java.lang.String"/>
+ <form-property name="nameTwo" type="java.lang.String"/>
+ <form-property name="name_three" type="java.lang.String"/>
+ <form-property name="_nameFour" type="java.lang.String"/>
+
+ <!-- unusually named properties -->
+ <form-property name="" type="java.lang.String"/>
+ <form-property name="a" type="java.lang.String"/>
+ <form-property name="A" type="java.lang.String"/>
+ <form-property name="ALLCAPS" type="java.lang.String"/>
+ <form-property name="LEADINGcaps" type="java.lang.String"/>
+ <form-property name="aPoorCapitalization" type="java.lang.String"/>
+ <form-property name="a1PoorCapitalization" type="java.lang.String"/>
+ <form-property name="AnotherPoorCapitalization" type="java.lang.String"/>
+ <form-property name="1NumericFirstChar" type="java.lang.String"/>
+ <form-property name="with space" type="java.lang.String"/>
+
+ <!-- various different types -->
+ <form-property name="intVal" type="int" initial="99"/>
+ <form-property name="integerVal" type="java.lang.Integer"/>
+ <form-property name="dateVal" type="java.util.Date"/>
+ <form-property name="localeVal" type="java.util.Locale"/>
+
+ <!-- indexed/mapped properties -->
+ <form-property name="stringArray" type="java.lang.String[]"/>
+ <form-property name="stringList" type="java.util.List"/>
+ <form-property name="stringMap" type="java.util.Map"/>
+ </form-bean>
</form-beans>
<global-forwards>
<forward name="absolute" path="http://jakarta.apache.org/struts" />
@@ -69,6 +100,10 @@
<!-- Locale Action -->
<action path="/locale" type="org.apache.struts.webapp.validator.LocaleAction" name="localeForm" scope="request">
<forward name="success" path="/welcome.do" />
+ </action>
+ <!-- Enhanced dyna form action -->
+ <action path="/enhanced-dynabean" name="DynaTest" type="org.apache.struts.webapp.exercise.EnhancedDynaFormAction">
+ <forward name="success" path="/enhanced-dynabean.jsp"/>
</action>
</action-mappings>
<message-resources parameter="org.apache.struts.webapp.exercise.MessageResources" null="false" />
Added: struts/apps/trunk/examples/src/webapp/exercise/enhanced-dynabean.jsp
URL: http://svn.apache.org/viewcvs/struts/apps/trunk/examples/src/webapp/exercise/enhanced-dynabean.jsp?rev=349623&view=auto
==============================================================================
--- struts/apps/trunk/examples/src/webapp/exercise/enhanced-dynabean.jsp (added)
+++ struts/apps/trunk/examples/src/webapp/exercise/enhanced-dynabean.jsp Mon Nov 28 20:21:33 2005
@@ -0,0 +1,168 @@
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
+<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
+<html>
+ <head>
+ <title>Test enhanced dynabean property access</title>
+ </head>
+ <body>
+ <div align="center">
+ <h1>Test enhanced dynabean property access</h1>
+ </div>
+
+ <p>
+ This page demonstrates the ways dyna form properties may be accessed
+ when the form bean declaration is marked with <code>enhanced="true"</code>
+ in the <code>struts-config.xml</code> file.
+ </p><p>
+ The first column in each
+ table shows the normal property access syntax for a dyna form; the
+ other two columns show what is possible with an enhanced dyna form
+ (and also what is <em>not</em> possible).
+ </p><p>
+ Note, in particular, the examples in the Unusually Named Properties
+ section. You should be careful defining properties which don't follow
+ standard JavaBean naming conventions when using this feature.
+ </p>
+
+ <h3>Regular Properties</h3>
+ <table border="1">
+ <thead>
+ <th>Traditional access</th>
+ <th>Map-based access</th>
+ <th>Direct access</th>
+ </thead>
+ <tr>
+ <td>form.map['name']: <c:out value="${DynaTest.map['name']}"/></td>
+ <td>form['name']: <c:out value="${DynaTest['name']}"/></td>
+ <td>form.name: <c:out value="${DynaTest.name}"/></td>
+ </tr><tr>
+ <td>form.map['nameTwo']: <c:out value="${DynaTest.map['nameTwo']}"/></td>
+ <td>form['nameTwo']: <c:out value="${DynaTest['nameTwo']}"/></td>
+ <td>form.nameTwo: <c:out value="${DynaTest.nameTwo}"/></td>
+ </tr><tr>
+ <td>form.map['name_three']: <c:out value="${DynaTest.map['name_three']}"/></td>
+ <td>form['name_three']: <c:out value="${DynaTest['name_three']}"/></td>
+ <td>form.name_three: <c:out value="${DynaTest.name_three}"/></td>
+ </tr><tr>
+ <td>form.map['_nameFour']: <c:out value="${DynaTest.map['_nameFour']}"/></td>
+ <td>form['_nameFour']: <c:out value="${DynaTest['_nameFour']}"/></td>
+ <td>form._nameFour']: <c:out value="${DynaTest._nameFour}"/></td>
+ </tr>
+ </table>
+
+ <h3>Unusually Named Properties</h3>
+ <table border="1">
+ <thead>
+ <th>Traditional access</th>
+ <th>Map-based access</th>
+ <th>Direct access</th>
+ </thead>
+ <tr>
+ <td>form.map['']: <c:out value="${DynaTest.map['']}"/></td>
+ <td>form['']: <em>skipped: property name can't be empty</em></td>
+ <td>form.: <em>skipped: property name can't be empty</em></td>
+ </tr><tr>
+ <td>form.map['a']: <c:out value="${DynaTest.map['a']}"/></td>
+ <td>form['a']: <c:out value="${DynaTest['a']}"/></td>
+ <td>form.a: <c:out value="${DynaTest.a}"/></td>
+ </tr><tr>
+ <td>form.map['A']: <c:out value="${DynaTest.map['A']}"/></td>
+ <td>form['A']: <em>skipped: conflicts w/ 'a'</em></td>
+ <td>form.A: <em>skipped: conflicts w/ 'a'</em></td>
+ </tr><tr>
+ <td>form.map['ALLCAPS']: <c:out value="${DynaTest.map['ALLCAPS']}"/></td>
+ <td>form['ALLCAPS']: <c:out value="${DynaTest['ALLCAPS']}"/></td>
+ <td>form.ALLCAPS: <c:out value="${DynaTest.ALLCAPS}"/></td>
+ </tr><tr>
+ <td>form.map['LEADINGcaps']: <c:out value="${DynaTest.map['LEADINGcaps']}"/></td>
+ <td>form['LEADINGcaps']: <c:out value="${DynaTest['LEADINGcaps']}"/></td>
+ <td>form.LEADINGcaps: <c:out value="${DynaTest.LEADINGcaps}"/></td>
+ </tr><tr>
+ <td>form.map['aPoorCapitalization']: <c:out value="${DynaTest.map['aPoorCapitalization']}"/></td>
+ <td>form['aPoorCapitalization']: <c:out value="${DynaTest['aPoorCapitalization']}"/></td>
+ <td>form.aPoorCapitalization: <c:out value="${DynaTest.aPoorCapitalization}"/></td>
+ </tr><tr>
+ <td>form.map['a1PoorCapitalization']: <c:out value="${DynaTest.map['a1PoorCapitalization']}"/></td>
+ <td>form['a1PoorCapitalization']: <c:out value="${DynaTest['a1PoorCapitalization']}"/></td>
+ <td>form.a1PoorCapitalization: <c:out value="${DynaTest.a1PoorCapitalization}"/></td>
+ </tr><tr>
+ <td>form.map['AnotherPoorCapitalization']: <c:out value="${DynaTest.map['AnotherPoorCapitalization']}"/></td>
+ <td>form['anotherPoorCapitalization']: <c:out value="${DynaTest['anotherPoorCapitalization']}"/><%-- Note capitalization --%></td>
+ <td>form.anotherPoorCapitalization: <c:out value="${DynaTest.anotherPoorCapitalization}"/><%-- Note capitalization --%></td>
+ </tr><tr>
+ <td>form.map['1NumericFirstChar']: <c:out value="${DynaTest.map['1NumericFirstChar']}"/></td>
+ <td>form['1NumericFirstChar']: <c:out value="${DynaTest['1NumericFirstChar']}"/></td>
+ <td>form.1NumericFirstChar: <em>skipped: JSTL EL doesn't allow leading digit</em></td>
+ </tr><tr>
+ <td>form.map['with space']: <c:out value="${DynaTest.map['with space']}"/></td>
+ <td>form['with space']: <em>skipped: getter can't contain space</em></td>
+ <td>form.with space: <em>skipped: getter can't contain space</em></td>
+ </tr>
+ </table>
+
+ <h3>Various Different Types</h3>
+ <table border="1">
+ <thead>
+ <th>Traditional access</th>
+ <th>Map-based access</th>
+ <th>Direct access</th>
+ </thead>
+ <tr>
+ <td>form.map['intVal']: <c:out value="${DynaTest.map['intVal']}"/></td>
+ <td>form['intVal']: <c:out value="${DynaTest['intVal']}"/></td>
+ <td>form.intVal: <c:out value="${DynaTest.intVal}"/></td>
+ </tr><tr>
+ <td>form.map['integerVal']: <c:out value="${DynaTest.map['integerVal']}"/></td>
+ <td>form['integerVal']: <c:out value="${DynaTest['integerVal']}"/></td>
+ <td>form.integerVal: <c:out value="${DynaTest.integerVal}"/></td>
+ </tr><tr>
+ <td>form.map['dateVal']: <c:out value="${DynaTest.map['dateVal']}"/></td>
+ <td>form['dateVal']: <c:out value="${DynaTest['dateVal']}"/></td>
+ <td>form.dateVal: <c:out value="${DynaTest.dateVal}"/></td>
+ </tr><tr>
+ <td>form.map['localeVal']: <c:out value="${DynaTest.map['localeVal']}"/></td>
+ <td>form['localeVal']: <c:out value="${DynaTest['localeVal']}"/></td>
+ <td>form.localeVal: <c:out value="${DynaTest.localeVal}"/></td>
+ </tr>
+ </table>
+
+ <h3>Indexed/Mapped Properties</h3>
+ <table border="1">
+ <thead>
+ <th>Traditional access</th>
+ <th>Map-based access</th>
+ <th>Direct access</th>
+ </thead>
+ <tr>
+ <td>form.map['stringArray']: <c:out value="${DynaTest.map['stringArray']}"/></td>
+ <td>form['stringArray']: <c:out value="${DynaTest['stringArray']}"/></td>
+ <td>form.stringArray: <c:out value="${DynaTest.stringArray}"/></td>
+ </tr><tr>
+ <td>form.map['stringArray'][0]: <c:out value="${DynaTest.map['stringArray'][0]}"/></td>
+ <td>form['stringArray'][0]: <c:out value="${DynaTest['stringArray'][0]}"/></td>
+ <td>form.stringArray[0]: <c:out value="${DynaTest.stringArray[0]}"/></td>
+ </tr><tr>
+ <td>form.map['stringList']: <c:out value="${DynaTest.map['stringList']}"/></td>
+ <td>form['stringList']: <c:out value="${DynaTest['stringList']}"/></td>
+ <td>form.stringList: <c:out value="${DynaTest.stringList}"/></td>
+ </tr><tr>
+ <td>form.map['stringList'][0]: <c:out value="${DynaTest.map['stringList'][0]}"/></td>
+ <td>form['stringList'][0]: <c:out value="${DynaTest['stringList'][0]}"/></td>
+ <td>form.stringList[0]: <c:out value="${DynaTest.stringList[0]}"/></td>
+ </tr><tr>
+ <td>form.map['stringMap']: <c:out value="${DynaTest.map['stringMap']}"/></td>
+ <td>form['stringMap']: <c:out value="${DynaTest['stringMap']}"/></td>
+ <td>form.stringMap: <c:out value="${DynaTest.stringMap}"/></td>
+ </tr><tr>
+ <td>form.map['stringMap'][0]: <c:out value="${DynaTest.map['stringMap'][0]}"/></td>
+ <td>form['stringMap'][0]: <c:out value="${DynaTest['stringMap'][0]}"/></td>
+ <td>form.stringMap[0]: <c:out value="${DynaTest.stringMap[0]}"/></td>
+ </tr><tr>
+ <td>form.map['stringMap']['one']: <c:out value="${DynaTest.map['stringMap']['one']}"/></td>
+ <td>form['stringMap']['one']: <c:out value="${DynaTest['stringMap']['one']}"/></td>
+ <td>form.stringMap['one']: <c:out value="${DynaTest.stringMap['one']}"/></td>
+ </tr>
+ </table>
+
+</body>
+</html>
\ No newline at end of file
Modified: struts/apps/trunk/examples/src/webapp/exercise/index.html
URL: http://svn.apache.org/viewcvs/struts/apps/trunk/examples/src/webapp/exercise/index.html?rev=349623&r1=349622&r2=349623&view=diff
==============================================================================
--- struts/apps/trunk/examples/src/webapp/exercise/index.html (original)
+++ struts/apps/trunk/examples/src/webapp/exercise/index.html Mon Nov 28 20:21:33 2005
@@ -88,6 +88,7 @@
<li><a href="forward-redirect-default.do">Use an ActionForward to redirect to the default page for the application ("/")</a></li>
<li><a href="forward-redirect-default-module.do">Use an ActionForward to redirect to the default page for this module ("/$module/")</a></li>
<li><a href="forward-redirect-path.do">Use an ActionForward to redirect another path ("/html-link.do")</a></li>
+ <li><a href="enhanced-dynabean.do">Reference properties of an enhanced dyna form with JSTL EL</a></li>
</ul>
</body>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org