Author: craigmcc
Date: Mon May 22 19:02:23 2006
New Revision: 408817

URL: http://svn.apache.org/viewvc?rev=408817&view=rev
Log:
Fix the <s:token> component so that it does not allow a spurious resubmit
to succeed after the first resubmit has failed.  This is done by caching the
token value the first time it is generated, so that the same value is used
if the page is rerendered later.  This works because a given value is only
accepted once.

JIRA Issue:  SHALE-177
Submitted By:  Veit Guna <grave AT gmx.de>

Modified:
    
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Token.java
    struts/shale/trunk/use-cases/src/web/WEB-INF/dialog-config.xml
    struts/shale/trunk/use-cases/src/web/profile/logon.jsp
    struts/shale/trunk/use-cases/src/web/profile/profile1.jsp
    struts/shale/trunk/use-cases/src/web/profile/profile2.jsp
    struts/shale/trunk/use-cases/src/web/profile/profile3.jsp

Modified: 
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Token.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/core-library/src/java/org/apache/shale/component/Token.java?rev=408817&r1=408816&r2=408817&view=diff
==============================================================================
--- 
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Token.java 
(original)
+++ 
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Token.java 
Mon May 22 19:02:23 2006
@@ -58,6 +58,13 @@
   
         
     /**
+     * <p>Local component attribute under which we store the token value
+     * the first time it is generated.</p>
+     */
+    private static final String TOKEN_ATTRIBUTE_KEY = 
"org.apache.shale.Token.TOKEN_VALUE";
+
+
+    /**
      * <p>Message resources for this class
      */
     private static Messages messages =
@@ -263,9 +270,18 @@
      */
     public String getToken() {
 
+        // Have we already generated a token value?  If so, use it
+        String value = (String) getAttributes().get(TOKEN_ATTRIBUTE_KEY);
+        if (value != null) {
+             return value;
+        }
+
+        // Generate a new token value and cache it for reuse if the
+        // current view is rerendered
         FacesContext context = FacesContext.getCurrentInstance();
         TokenProcessor tp = getTokenProcessor(context);
         String token = tp.generate(context);
+        getAttributes().put(TOKEN_ATTRIBUTE_KEY, token);
         if (log.isDebugEnabled()) {
             log.debug("Generating token '" + token + "'");
         }

Modified: struts/shale/trunk/use-cases/src/web/WEB-INF/dialog-config.xml
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/use-cases/src/web/WEB-INF/dialog-config.xml?rev=408817&r1=408816&r2=408817&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/WEB-INF/dialog-config.xml (original)
+++ struts/shale/trunk/use-cases/src/web/WEB-INF/dialog-config.xml Mon May 22 
19:02:23 2006
@@ -57,6 +57,8 @@
 
     <subdialog           name="Create Profile"
                    dialogName="Edit Profile">
+      <transition     outcome="next"
+                       target="Exit"/>
       <transition     outcome="success"
                        target="Exit"/>
     </subdialog>

Modified: struts/shale/trunk/use-cases/src/web/profile/logon.jsp
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/use-cases/src/web/profile/logon.jsp?rev=408817&r1=408816&r2=408817&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/profile/logon.jsp (original)
+++ struts/shale/trunk/use-cases/src/web/profile/logon.jsp Mon May 22 19:02:23 
2006
@@ -37,7 +37,7 @@
 
       <f:facet           name="header">
         <h:messages
-                   globalOnly="true"/>
+                   globalOnly="false"/>
       </f:facet>
 
       <%-- "remember" --%>

Modified: struts/shale/trunk/use-cases/src/web/profile/profile1.jsp
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/use-cases/src/web/profile/profile1.jsp?rev=408817&r1=408816&r2=408817&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/profile/profile1.jsp (original)
+++ struts/shale/trunk/use-cases/src/web/profile/profile1.jsp Mon May 22 
19:02:23 2006
@@ -37,7 +37,7 @@
 
       <f:facet           name="header">
         <h:messages
-                   globalOnly="true"/>
+                   globalOnly="false"/>
       </f:facet>
 
       <%-- username --%>

Modified: struts/shale/trunk/use-cases/src/web/profile/profile2.jsp
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/use-cases/src/web/profile/profile2.jsp?rev=408817&r1=408816&r2=408817&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/profile/profile2.jsp (original)
+++ struts/shale/trunk/use-cases/src/web/profile/profile2.jsp Mon May 22 
19:02:23 2006
@@ -39,7 +39,7 @@
 
       <f:facet           name="header">
         <h:messages
-                   globalOnly="true"/>
+                   globalOnly="false"/>
       </f:facet>
 
       <%-- fullName --%>

Modified: struts/shale/trunk/use-cases/src/web/profile/profile3.jsp
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/use-cases/src/web/profile/profile3.jsp?rev=408817&r1=408816&r2=408817&view=diff
==============================================================================
--- struts/shale/trunk/use-cases/src/web/profile/profile3.jsp (original)
+++ struts/shale/trunk/use-cases/src/web/profile/profile3.jsp Mon May 22 
19:02:23 2006
@@ -37,7 +37,7 @@
 
       <f:facet           name="header">
         <h:messages
-                   globalOnly="true"/>
+                   globalOnly="false"/>
       </f:facet>
 
       <%-- categories --%>


Reply via email to