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