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 --%>