Author: niallp Date: Wed Nov 29 07:17:52 2006 New Revision: 480593 URL: http://svn.apache.org/viewvc?view=rev&rev=480593 Log: STR-2955 - extending action is still overriden when validate is specifically set to true or cancellable is set to false - reported by Mark Shifman
Modified: struts/struts1/trunk/core/src/main/java/org/apache/struts/config/ActionConfig.java struts/struts1/trunk/core/src/test/java/org/apache/struts/config/TestActionConfig.java Modified: struts/struts1/trunk/core/src/main/java/org/apache/struts/config/ActionConfig.java URL: http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/main/java/org/apache/struts/config/ActionConfig.java?view=diff&rev=480593&r1=480592&r2=480593 ============================================================================== --- struts/struts1/trunk/core/src/main/java/org/apache/struts/config/ActionConfig.java (original) +++ struts/struts1/trunk/core/src/main/java/org/apache/struts/config/ActionConfig.java Wed Nov 29 07:17:52 2006 @@ -35,8 +35,7 @@ * <code><action></code> element from a Struts module configuration * file.</p> * - * @version $Rev$ $Date: 2005-08-06 04:12:10 -0400 (Sat, 06 Aug 2005) - * $ + * @version $Rev$ $Date$ * @since Struts 1.1 */ public class ActionConfig extends BaseConfig { @@ -85,6 +84,11 @@ protected String inherit = null; /** + * Indicates whether the "cancellable " property has been set or not. + */ + private boolean cancellableSet = false; + + /** * <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 @@ -195,6 +199,11 @@ protected boolean unknown = false; /** + * Indicates whether the "validate" property has been set or not. + */ + private boolean validateSet = false; + + /** * <p> Should the <code>validate()</code> method of the form bean * associated with this action be called? */ @@ -323,6 +332,7 @@ } this.cancellable = cancellable; + this.cancellableSet = true; } /** @@ -677,6 +687,7 @@ } this.validate = validate; + this.validateSet = true; } /** @@ -1028,7 +1039,7 @@ setAttribute(config.getAttribute()); } - if (!getCancellable()) { + if (!cancellableSet) { setCancellable(config.getCancellable()); } @@ -1092,7 +1103,7 @@ setUnknown(config.getUnknown()); } - if (getValidate()) { + if (!validateSet) { setValidate(config.getValidate()); } Modified: struts/struts1/trunk/core/src/test/java/org/apache/struts/config/TestActionConfig.java URL: http://svn.apache.org/viewvc/struts/struts1/trunk/core/src/test/java/org/apache/struts/config/TestActionConfig.java?view=diff&rev=480593&r1=480592&r2=480593 ============================================================================== --- struts/struts1/trunk/core/src/test/java/org/apache/struts/config/TestActionConfig.java (original) +++ struts/struts1/trunk/core/src/test/java/org/apache/struts/config/TestActionConfig.java Wed Nov 29 07:17:52 2006 @@ -310,6 +310,55 @@ } /** + * Make sure that correct exception is thrown if a base action can't be + * found. + */ + public void testInheritBoolean() + throws Exception { + + ActionConfig parentConfig = new ActionConfig(); + parentConfig.setPath("/parent"); + ActionConfig childConfig = null; + + // Test if boolean is NOT set it IS inherited + parentConfig.setValidate(true); + parentConfig.setCancellable(true); + childConfig = new ActionConfig(); + childConfig.inheritFrom(parentConfig); + assertEquals("default validate inherit true", true, childConfig.getValidate()); + assertEquals("default cancellable inherit true", true, childConfig.getValidate()); + + // Test if boolean is NOT set it IS inherited + parentConfig.setValidate(false); + parentConfig.setCancellable(false); + childConfig = new ActionConfig(); + childConfig.inheritFrom(parentConfig); + assertEquals("default validate inherit false", false, childConfig.getValidate()); + assertEquals("default cancellable inherit false", false, childConfig.getValidate()); + + // Test if boolean IS set it is NOT inherited + parentConfig.setValidate(true); + parentConfig.setCancellable(true); + childConfig = new ActionConfig(); + childConfig.setValidate(false); + childConfig.setCancellable(false); + childConfig.inheritFrom(parentConfig); + assertEquals("set validate (not inherit true)", false, childConfig.getValidate()); + assertEquals("set cancellable (not inherit false)", false, childConfig.getValidate()); + + // Test if boolean IS set it is NOT inherited + parentConfig.setValidate(false); + parentConfig.setCancellable(false); + childConfig = new ActionConfig(); + childConfig.setValidate(true); + childConfig.setCancellable(true); + childConfig.inheritFrom(parentConfig); + assertEquals("set validate (not inherit false)", true, childConfig.getValidate()); + assertEquals("set cancellable (not inherit false)", true, childConfig.getValidate()); + + } + + /** * Used to detect that ActionConfig is making the right calls. */ public static class CustomActionConfig extends ActionConfig {