You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by ni...@apache.org on 2006/02/14 20:26:17 UTC
svn commit: r377805 - in /struts/action/branches/STRUTS_1_2_BRANCH:
src/examples/org/apache/struts/webapp/exercise/
src/share/org/apache/struts/action/ src/share/org/apache/struts/config/
web/example/WEB-INF/ web/examples/WEB-INF/exercise/ web/examples...
Author: niallp
Date: Tue Feb 14 11:26:15 2006
New Revision: 377805
URL: http://svn.apache.org/viewcvs?rev=377805&view=rev
Log:
Fix Bug 38374 in 1.2.x Branch - Validation always skipped with Globals.CANCEL_KEY - thanks to Paul Benedict for reporting this and providing the patch.
Added:
struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/InvalidCancelException.java (with props)
struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/html-cancel.jsp (with props)
Modified:
struts/action/branches/STRUTS_1_2_BRANCH/src/examples/org/apache/struts/webapp/exercise/MessageResources.properties
struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/RequestProcessor.java
struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/config/ActionConfig.java
struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config-registration.xml
struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config.xml
struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/exercise/struts-config.xml
struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/validator/struts-config.xml
struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/index.html
Modified: struts/action/branches/STRUTS_1_2_BRANCH/src/examples/org/apache/struts/webapp/exercise/MessageResources.properties
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/src/examples/org/apache/struts/webapp/exercise/MessageResources.properties?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/src/examples/org/apache/struts/webapp/exercise/MessageResources.properties (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/src/examples/org/apache/struts/webapp/exercise/MessageResources.properties Tue Feb 14 11:26:15 2006
@@ -6,6 +6,7 @@
errors.footer=</table>
errors.prefix=<tr><td>
errors.suffix=</td></tr>
+errors.invalidCancel=Cancel is a not an valid operation for this Action.
property1error1=Property 1, Error 1
property2error1=Property 2, Error 1
Added: struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/InvalidCancelException.java
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/InvalidCancelException.java?rev=377805&view=auto
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/InvalidCancelException.java (added)
+++ struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/InvalidCancelException.java Tue Feb 14 11:26:15 2006
@@ -0,0 +1,42 @@
+/*
+ * $Id$
+ *
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts.action;
+
+
+/**
+ * <p> Thrown when a token generated by the Cancel tag is found in the
+ * request, but the cancellable property for the Action Mapping is not set.
+ * </p>
+ */
+public class InvalidCancelException extends Exception {
+ /**
+ * <p>Default constructor.</p>
+ */
+ public InvalidCancelException() {
+ super();
+ }
+
+ /**
+ * <p>Construct the exception with the specified message.</p>
+ *
+ * @param message the message
+ */
+ public InvalidCancelException(String message) {
+ super(message);
+ }
+}
Propchange: struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/InvalidCancelException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/InvalidCancelException.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/RequestProcessor.java
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/RequestProcessor.java?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/RequestProcessor.java (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/action/RequestProcessor.java Tue Feb 14 11:26:15 2006
@@ -201,10 +201,22 @@
// Process any ActionForm bean related to this request
ActionForm form = processActionForm(request, response, mapping);
processPopulate(request, response, form, mapping);
- if (!processValidate(request, response, form, mapping)) {
+
+ // Validate any fields of the ActionForm bean, if applicable
+ try {
+ if (!processValidate(request, response, form, mapping)) {
+ return;
+ }
+ } catch (InvalidCancelException e) {
+ ActionForward forward = processException(request, response, e, form, mapping);
+ processForwardConfig(request, response, forward);
return;
+ } catch (IOException e) {
+ throw e;
+ } catch (ServletException e) {
+ throw e;
}
-
+
// Process a forward or include specified by this mapping
if (!processForward(request, response, mapping)) {
return;
@@ -897,22 +909,33 @@
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet exception occurs
+ * @exception InvalidCancelException if a cancellation is attempted
+ * without the proper action configuration
*/
protected boolean processValidate(HttpServletRequest request,
HttpServletResponse response,
ActionForm form,
ActionMapping mapping)
- throws IOException, ServletException {
+ throws IOException, ServletException, InvalidCancelException {
if (form == null) {
return (true);
}
- // Was this request cancelled?
+
+ // Was this request cancelled? If it has been, the mapping also
+ // needs to state whether the cancellation is permissable; otherwise
+ // the cancellation is considered to be a symptom of a programmer
+ // error or a spoof.
if (request.getAttribute(Globals.CANCEL_KEY) != null) {
- if (log.isDebugEnabled()) {
- log.debug(" Cancelled transaction, skipping validation");
+ if (mapping.getCancellable()) {
+ if (log.isDebugEnabled()) {
+ log.debug(" Cancelled transaction, skipping validation");
+ }
+ return (true);
+ } else {
+ request.removeAttribute(Globals.CANCEL_KEY);
+ throw new InvalidCancelException();
}
- return (true);
}
// Has validation been turned off for this mapping?
Modified: struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/config/ActionConfig.java
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/config/ActionConfig.java?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/config/ActionConfig.java (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/src/share/org/apache/struts/config/ActionConfig.java Tue Feb 14 11:26:15 2006
@@ -525,7 +525,39 @@
}
this.validate = validate;
}
+
+ /**
+ * <p>Can this Action be cancelled? [false]</p> <p> By default, when an
+ * Action is cancelled, validation is bypassed and the Action should not
+ * execute the business operation. If a request tries to cancel an Action
+ * when cancellable is not set, a "InvalidCancelException" is thrown.</p>
+ * @since Struts 1.2.9
+ */
+ protected boolean cancellable = false;
+ /**
+ * <p>Accessor for cancellable property</p>
+ *
+ * @return True if Action can be cancelled
+ * @since Struts 1.2.9
+ */
+ public boolean getCancellable() {
+ return (this.cancellable);
+ }
+
+ /**
+ * <p>Mutator for for cancellable property</p>
+ *
+ * @param cancellable
+ * @since Struts 1.2.9
+ */
+ public void setCancellable(boolean cancellable) {
+ if (configured) {
+ throw new IllegalStateException("Configuration is frozen");
+ }
+ this.cancellable = cancellable;
+ }
+
// --------------------------------------------------------- Public Methods
@@ -775,6 +807,10 @@
sb.append(",type=");
sb.append(type);
}
+ sb.append(",validate=");
+ sb.append(validate);
+ sb.append(",cancellable=");
+ sb.append(cancellable);
return (sb.toString());
}
Modified: struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config-registration.xml
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config-registration.xml?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config-registration.xml (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config-registration.xml Tue Feb 14 11:26:15 2006
@@ -5,7 +5,7 @@
<!--
$Header: /home/cvs/jakarta-struts/web/example/WEB-INF/struts-config-registration.xml,v 1.8 2004/09/02 03:43:15 niallp Exp $
$Revision: 1.8 $
- $Date: 2004/09/02 03:43:15 $
+ $Date$
Copyright 2000-2004 Apache Software Foundation
@@ -63,7 +63,9 @@
type="org.apache.struts.webapp.example.Save{1}Action"
name="{1}Form"
scope="request"
- input="{1}"/>
+ input="{1}">
+ <set-property property="cancellable" value="true"/>
+ </action>
</action-mappings>
Modified: struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config.xml?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config.xml (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/web/example/WEB-INF/struts-config.xml Tue Feb 14 11:26:15 2006
@@ -5,7 +5,7 @@
<!--
$Header: /home/cvs/jakarta-struts/web/example/WEB-INF/struts-config.xml,v 1.43 2004/09/02 03:43:15 niallp Exp $
$Revision: 1.43 $
- $Date: 2004/09/02 03:43:15 $
+ $Date$
Copyright 2000-2004 Apache Software Foundation
@@ -90,6 +90,7 @@
name="LogonForm"
scope="request"
input="logon">
+ <set-property property="cancellable" value="true"/>
<exception
key="expired.password"
type="org.apache.struts.webapp.example.ExpiredPasswordException"
@@ -118,6 +119,7 @@
name="SubscriptionForm"
scope="request"
input="subscription">
+ <set-property property="cancellable" value="true"/>
<forward name="subscription" path="/subscription.jsp"/>
<forward name="success" path="/EditRegistration.do?action=Edit"/>
</action>
Modified: struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/exercise/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/exercise/struts-config.xml?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/exercise/struts-config.xml (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/exercise/struts-config.xml Tue Feb 14 11:26:15 2006
@@ -24,6 +24,24 @@
<action-mappings>
<action path="/welcome" forward="/index.html" />
<action path="/bean-write-2" forward="/bean-write-2.jsp" />
+ <action path="/html-cancel" forward="/html-cancel.jsp"/>
+ <action path="/html-cancel-true" name="testbean"
+ input="/html-cancel.jsp" cancellable="true" validate="true"
+ forward="/welcome.do"/>
+ <action path="/html-cancel-false" name="testbean"
+ input="/html-cancel.jsp" cancellable="false" validate="true"
+ forward="/welcome.do">
+ <exception
+ key="errors.invalidCancel"
+ type="org.apache.struts.action.InvalidCancelException"
+ path="/html-cancel.jsp"/>
+ </action>
+ <action path="/html-cancel-exception" name="testbean"
+ input="/html-cancel.jsp" cancellable="false" validate="true"
+ forward="/welcome.do"/>
+ <action path="/html-cancel-novalidate" name="testbean"
+ input="/html-cancel.jsp" cancellable="false" validate="false"
+ forward="/welcome.do"/>
<action path="/html-img" forward="/html-img.jsp" />
<!-- :FIXME: ImageAction should compute module prefix -->
<action path="/html-img-action" type="org.apache.struts.webapp.exercise.ImageAction" parameter="/exercise/struts-power.gif"/>
Modified: struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/validator/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/validator/struts-config.xml?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/validator/struts-config.xml (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/web/examples/WEB-INF/validator/struts-config.xml Tue Feb 14 11:26:15 2006
@@ -50,6 +50,7 @@
<action path="/registration-submit" type="org.apache.struts.webapp.validator.RegistrationAction" name="registrationForm" scope="request" validate="true" input="input">
<forward name="input" path="/registration.do" />
<forward name="success" path="/index.jsp" />
+ <set-property property="cancellable" value="true"/>
</action>
<action path="/jsRegistration" forward="/jsRegistration.jsp" />
<!-- Multi-Part Registration Action -->
@@ -58,12 +59,14 @@
<forward name="success" path="/welcome.do" />
<forward name="input1" path="/multiRegistration1.jsp" />
<forward name="input2" path="/multiRegistration2.jsp" />
+ <set-property property="cancellable" value="true"/>
</action>
<!-- Type Action -->
<action path="/type" forward="/type.jsp" />
<action path="/type-submit" type="org.apache.struts.webapp.validator.TypeAction" name="typeForm" scope="request" validate="true" input="input">
<forward name="input" path="/type.do" />
<forward name="success" path="/welcome.do" />
+ <set-property property="cancellable" value="true"/>
</action>
<!-- JavaScript Type Action -->
<action path="/editJsType" type="org.apache.struts.webapp.validator.EditTypeAction" scope="request" validate="false">
@@ -72,6 +75,7 @@
<action path="/jsType" forward="/jsType.jsp" />
<action path="/jsType-submit" type="org.apache.struts.webapp.validator.TypeAction" name="jsTypeForm" scope="request" validate="true" input="/jsType.jsp">
<forward name="success" path="/welcome.do" />
+ <set-property property="cancellable" value="true"/>
</action>
<!-- Bundles Examples -->
@@ -79,6 +83,7 @@
<action path="/validateBundleExamples" type="org.apache.struts.actions.ForwardAction" name="bundlesForm" scope="request"
parameter="/validator/welcome.do" validate="true" input="input" >
<forward name="input" path="/viewBundleExamples.do" />
+ <set-property property="cancellable" value="true"/>
</action>
<!-- JavaScript Bundles Examples -->
@@ -86,6 +91,7 @@
<action path="/validateJsBundleExamples" type="org.apache.struts.actions.ForwardAction" name="bundlesForm" scope="request"
parameter="/validator/welcome.do" validate="true" input="input" >
<forward name="input" path="/viewJsBundleExamples.do" />
+ <set-property property="cancellable" value="true"/>
</action>
<!-- validwhen Examples -->
@@ -93,6 +99,7 @@
<action path="/validateValidWhenExamples" type="org.apache.struts.actions.ForwardAction" name="validWhenForm" scope="request"
parameter="/validator/welcome.do" validate="true" input="input" >
<forward name="input" path="/viewValidWhenExamples.do" />
+ <set-property property="cancellable" value="true"/>
</action>
<!-- Locale Action -->
Added: struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/html-cancel.jsp
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/html-cancel.jsp?rev=377805&view=auto
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/html-cancel.jsp (added)
+++ struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/html-cancel.jsp Tue Feb 14 11:26:15 2006
@@ -0,0 +1,98 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
+<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
+<html:html>
+ <head>
+ <title>
+ <title>Test struts-html:cancel Tag</title>
+ </title>
+ <html:base/>
+ </head>
+
+ <body bgcolor="white">
+
+ <p><strong>Cancel Not Allowed - Error Message</strong></p>
+
+ <p>
+ Pressing the Cancel button should display an error
+ message, since Cancellable is not set for this Action
+ but an Exception handler has been configured to handle
+ the throw exception.
+ </p>
+
+ <logic:messagesPresent>
+ <p>
+ <font color="red"><strong>
+ <html:messages id="msg">
+ <bean:write name="msg"/>
+ </html:messages>
+ </strong></font>
+ </p>
+ </logic:messagesPresent>
+
+ <p>
+ <html:form action="/html-cancel-false">
+ <html:submit property="submit"/>
+  
+ <html:reset/>
+ <html:cancel/>
+ </html:form>
+ </p>
+
+ <hr/>
+
+ <p><strong>Cancel Not Allowed - Exception</strong></p>
+ <p>
+ Pressing this Cancel button should throw an
+ <code>org.apache.struts.action.InvalidCancelException</code>
+ since Cancellable is not set for this Action and no exception
+ handler was configured.
+ </p>
+
+ <p>
+ <html:form action="/html-cancel-exception">
+ <html:submit property="submit"/>
+  
+ <html:reset/>
+ <html:cancel/>
+ </html:form>
+ </p>
+
+ <hr/>
+
+ <p><strong>Cancel Allowed (Validate true)</strong></p>
+ <p>
+ Pressing this Cancel button should return to the Welcome page,
+ as Cancellable is set to true for this Action.
+ </p>
+
+ <p>
+ <html:form action="/html-cancel-true">
+ <html:submit property="submit"/>
+  
+ <html:reset/>
+ <html:cancel/>
+ </html:form>
+ </p>
+ <hr/>
+
+ <p><strong>Cancel Not Allowed - Exception (Validate false)</strong></p>
+ <p>
+ Pressing this Cancel button should throw an
+ <code>org.apache.struts.action.InvalidCancelException</code>
+ since Cancellable is not set for this Action even though
+ the mapping is set to NOT validate.
+ </p>
+
+ <p>
+ <html:form action="/html-cancel-novalidate">
+ <html:submit property="submit"/>
+  
+ <html:reset/>
+ <html:cancel/>
+ </html:form>
+ </p>
+
+ </body>
+</html:html>
Propchange: struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/html-cancel.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/html-cancel.jsp
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/index.html
URL: http://svn.apache.org/viewcvs/struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/index.html?rev=377805&r1=377804&r2=377805&view=diff
==============================================================================
--- struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/index.html (original)
+++ struts/action/branches/STRUTS_1_2_BRANCH/web/examples/exercise/index.html Tue Feb 14 11:26:15 2006
@@ -42,6 +42,8 @@
<h3>HTML Tags</h3>
<ul>
+ <li><a href="html-cancel.do"><html:cancel></a></li>
+
<li><a href="html-img.do"><html:img></a></li>
<li><a href="html-link.do"><html:link></a></li>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org