Author: hlship
Date: Sat Oct 29 14:47:11 2005
New Revision: 329487

URL: http://svn.apache.org/viewcvs?rev=329487&view=rev
Log:
TAPESTRY-715: LinkSubmit component should render its body, even when disabled

Modified:
    
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
    
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/LinkSubmit.java
    
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/TestLinkSubmit.java
    jakarta/tapestry/trunk/status.xml

Modified: 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java?rev=329487&r1=329486&r2=329487&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
 (original)
+++ 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
 Sat Oct 29 14:47:11 2005
@@ -114,6 +114,12 @@
             {
                 rewindFormComponent(writer, cycle);
             }
+
+            // This is for the benefit of the couple of components 
(LinkSubmit) that allow a body.
+            // The body should render when the component rewinds.
+
+            if (getRenderBodyOnRewind())
+                renderBody(writer, cycle);
         }
         else if (!cycle.isRewinding())
         {
@@ -128,6 +134,21 @@
             }
 
         }
+    }
+
+    /**
+     * A small number of components should always render their body on rewind 
(even if the component
+     * is itself disabled) and should override this method to return true. 
Components that
+     * explicitly render their body inside
+     * [EMAIL PROTECTED] #rewindFormComponent(IMarkupWriter, IRequestCycle)} 
should leave this method returning
+     * false. Remember that if the component is [EMAIL PROTECTED] 
IFormComponent#isDisabled() disabled} then
+     * [EMAIL PROTECTED] #rewindFormComponent(IMarkupWriter, IRequestCycle)} 
won't be invoked.
+     * 
+     * @return false; override this method to change.
+     */
+    protected boolean getRenderBodyOnRewind()
+    {
+        return false;
     }
 
     protected void renderDelegatePrefix(IMarkupWriter writer, IRequestCycle 
cycle)

Modified: 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/LinkSubmit.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/LinkSubmit.java?rev=329487&r1=329486&r2=329487&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/LinkSubmit.java
 (original)
+++ 
jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/form/LinkSubmit.java
 Sat Oct 29 14:47:11 2005
@@ -100,17 +100,6 @@
     }
 
     /**
-     * When a LinkSubmit rewinds, it should invoke its listener, etc., but 
should also render any
-     * components in its body.
-     */
-    protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle 
cycle)
-    {
-        super.rewindFormComponent(writer, cycle);
-
-        renderBody(writer, cycle);
-    }
-
-    /**
      * @see 
org.apache.tapestry.AbstractComponent#prepareForRender(org.apache.tapestry.IRequestCycle)
      */
     protected void prepareForRender(IRequestCycle cycle)
@@ -139,4 +128,14 @@
     {
         return false;
     }
+
+    /**
+     * Returns true; the LinkSubmit's body should render during a rewind, even 
if the component is
+     * itself disabled.
+     */
+    protected boolean getRenderBodyOnRewind()
+    {
+        return true;
+    }
+
 }

Modified: 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/TestLinkSubmit.java
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/TestLinkSubmit.java?rev=329487&r1=329486&r2=329487&view=diff
==============================================================================
--- 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/TestLinkSubmit.java
 (original)
+++ 
jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/form/TestLinkSubmit.java
 Sat Oct 29 14:47:11 2005
@@ -29,6 +29,8 @@
 import org.apache.tapestry.IScript;

 import org.apache.tapestry.IScriptProcessor;

 import org.apache.tapestry.PageRenderSupport;

+import org.apache.tapestry.TapestryUtils;

+import org.apache.tapestry.valid.IValidationDelegate;

 

 /**

  * Tests for [EMAIL PROTECTED] org.apache.tapestry.form.LinkSubmit}

@@ -211,20 +213,72 @@
         IRequestCycle cycle = newCycle();

         IRender body = newRender();

         IForm form = newForm();

+        IValidationDelegate delegate = newDelegate();

+

+        LinkSubmit linkSubmit = (LinkSubmit) newInstance(LinkSubmit.class, new 
Object[]

+        { "name", "fred", "form", form });

+        linkSubmit.addBody(body);

+

+        trainGetForm(cycle, form);

+

+        trainWasPrerendered(form, writer, linkSubmit, false);

+

+        trainGetDelegate(form, delegate);

+

+        trainGetElementId(form, linkSubmit, "fred");

+

+        delegate.setFormComponent(linkSubmit);

+

+        trainIsRewinding(form, true);

+

+        // Finally, code inside LinkSubmit ...

 

         trainGetParameter(cycle, "fred", null);

 

+        // ... and back to AbstractFormComponent

+

         body.render(writer, cycle);

 

         replayControls();

 

-        LinkSubmit linkSubmit = (LinkSubmit) newInstance(LinkSubmit.class, new 
Object[]

-        { "name", "fred", "form", form });

-        linkSubmit.addBody(body);

-

-        linkSubmit.rewindFormComponent(writer, cycle);

+        linkSubmit.renderComponent(writer, cycle);

 

         verifyControls();

+    }

+

+    private void trainIsRewinding(IForm form, boolean isRewindind)

+    {

+        form.isRewinding();

+        setReturnValue(form, isRewindind);

+    }

+

+    protected void trainGetElementId(IForm form, IFormComponent field, String 
name)

+    {

+        form.getElementId(field);

+        setReturnValue(form, name);

+    }

+

+    protected void trainGetDelegate(IForm form, IValidationDelegate delegate)

+    {

+        form.getDelegate();

+        setReturnValue(form, delegate);

+    }

+

+    protected void trainWasPrerendered(IForm form, IMarkupWriter writer, 
IFormComponent field,

+            boolean wasPrendered)

+    {

+        form.wasPrerendered(writer, field);

+        setReturnValue(form, wasPrendered);

+    }

+

+    protected void trainGetForm(IRequestCycle cycle, IForm form)

+    {

+        trainGetAttribute(cycle, TapestryUtils.FORM_ATTRIBUTE, form);

+    }

+

+    protected IValidationDelegate newDelegate()

+    {

+        return (IValidationDelegate) newMock(IValidationDelegate.class);

     }

 

 }


Modified: jakarta/tapestry/trunk/status.xml
URL: 
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=329487&r1=329486&r2=329487&view=diff
==============================================================================
--- jakarta/tapestry/trunk/status.xml (original)
+++ jakarta/tapestry/trunk/status.xml Sat Oct 29 14:47:11 2005
@@ -58,6 +58,7 @@
       <action type="update" dev="HLS">Deprecate IMonitor and IMonitorFactory 
(for removal in 4.1)</action>
       <action type="fix" dev="HLS" fixes-bug="TAPESTRY-699">&lt;div&gt; tag 
around form hidden fields should not be visible</action>
       <action type="fix" dev="HLS" fixes-bug="TAPESTRY-711">Do not give focus 
to disabled fields</action>
+      <action type="fix" dev="HLS" fixes-bug="TAPESTRY-715">LinkSubmit 
component should render its body, even when disabled</action>
     </release>
     <release version="4.0-beta-11" date="Oct 16 2005">
       <action type="fix" dev="HLS" 
fixes-bug="TAPESTRY-650">ClassNotFoundException thrown when deserializing an 
object from a client persistent property</action>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to