You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/12/17 20:24:33 UTC

svn commit: r488030 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/dojo/form/ test/org/apache/tapestry/dojo/form/

Author: jkuhnert
Date: Sun Dec 17 11:24:32 2006
New Revision: 488030

URL: http://svn.apache.org/viewvc?view=rev&rev=488030
Log:
Resolves TAPESTRY-1197.

tapestry.widget.Widget recently had a new parameter added that specified whether or not to destroy the widget 
in question as part of the sync. The form based widget components weren't using this new logic and so 
were incorrectly destroying themselves when they really shouldn't be.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java Sun Dec 17 11:24:32 2006
@@ -27,6 +27,17 @@
  */
 public abstract class AbstractFormWidget extends AbstractFormComponent implements IFormWidget
 {
+    
+    public abstract void setDestroy(boolean destroy);
+    
+    /**
+     * Determined dynamically at runtime during rendering, informs widget implementations
+     * if they should destroy their client side widget equivalents or leave them in tact.
+     * 
+     * @return True if the widget should be destroyed on this render, false otherwise.
+     */
+    public abstract boolean getDestroy();
+    
     /**
      * {@inheritDoc}
      */
@@ -40,6 +51,25 @@
      */
     protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle)
     {
+        if(!cycle.isRewinding()) {
+            
+            if (!cycle.getResponseBuilder().isDynamic() 
+                    || cycle.getResponseBuilder().explicitlyContains(this)) {
+                
+                setDestroy(false);
+            } else
+                setDestroy(true);
+        }
+        
+        // don't render if not part of update response
+        
+        if (cycle.getResponseBuilder().isDynamic()
+                && (!cycle.getResponseBuilder().explicitlyContains(this) 
+                        && !cycle.getResponseBuilder().contains(this))) {
+            
+            return;
+        }
+        
         renderFormWidget(writer, cycle);
     }
     

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java Sun Dec 17 11:24:32 2006
@@ -45,8 +45,7 @@
  * 
  * @author jkuhnert
  */
-public abstract class Autocompleter extends AbstractFormWidget 
-    implements ValidatableField, IJSONRender, IDirect
+public abstract class Autocompleter extends AbstractFormWidget implements ValidatableField, IJSONRender, IDirect
 {
     // mode, can be remote or local (local being from html rendered option elements)
     private static final String MODE_REMOTE = "remote";
@@ -109,6 +108,7 @@
         
         parms.put("props", json.toString());
         parms.put("form", getForm().getName());
+        parms.put("widget", this);
         
         PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, this);
         getScript().execute(this, cycle, prs, parms);

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script Sun Dec 17 11:24:32 2006
@@ -6,6 +6,7 @@
 <input-symbol key="id" required="yes" />
 <input-symbol key="props" required="yes" />
 <input-symbol key="form" required="yes" />
+<input-symbol key="widget" required="yes" />
     <body>
         <unique>
             dojo.require("dojo.widget.Manager");
@@ -16,11 +17,11 @@
     </body>
     <initialization>
         var ${id}prop=${props};
-        tapestry.widget.synchronizeWidgetState("${id}", "Select", ${id}prop);
+        tapestry.widget.synchronizeWidgetState("${id}", "Select", ${id}prop, ${widget.destroy});
         if (${id}prop["label"] &amp;&amp; ${id}prop["value"]){
             var selw=dojo.widget.byId("${id}");
             selw.setValue(${id}prop["value"]);
             selw.setLabel(${id}prop["label"]);
         }
     </initialization>
-</script>
\ No newline at end of file
+</script>

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java Sun Dec 17 11:24:32 2006
@@ -36,8 +36,7 @@
  * 
  * @author jkuhnert
  */
-public abstract class DropdownDatePicker extends AbstractFormWidget
-    implements TranslatedField
+public abstract class DropdownDatePicker extends AbstractFormWidget implements TranslatedField
 {
     
     private static final SimpleDateFormat RFC3339_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
@@ -94,6 +93,7 @@
         Map parms = new HashMap();
         parms.put("clientId", getClientId());
         parms.put("props", json.toString());
+        parms.put("widget", this);
         
         getScript().execute(this, cycle, TapestryUtils.getPageRenderSupport(cycle, this), parms);
     }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script Sun Dec 17 11:24:32 2006
@@ -5,6 +5,7 @@
 <script>
 <input-symbol key="clientId" required="yes" />
 <input-symbol key="props" required="yes" />
+<input-symbol key="widget" required="yes" />
     <body>
         <unique>
             dojo.require("dojo.widget.*");
@@ -12,6 +13,6 @@
         </unique>
     </body>
     <initialization>
-        tapestry.widget.synchronizeWidgetState("${clientId}", "DropdownDatePicker", ${props});
+        tapestry.widget.synchronizeWidgetState("${clientId}", "DropdownDatePicker", ${props}, ${widget.destroy});
     </initialization>
 </script>

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java Sun Dec 17 11:24:32 2006
@@ -36,8 +36,7 @@
  * 
  * @author jkuhnert
  */
-public abstract class DropdownTimePicker extends AbstractFormWidget
-    implements TranslatedField
+public abstract class DropdownTimePicker extends AbstractFormWidget implements TranslatedField
 {
     private static final SimpleDateFormat RFC3339_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
     
@@ -93,6 +92,7 @@
         Map parms = new HashMap();
         parms.put("clientId", getClientId());
         parms.put("props", json.toString());
+        parms.put("widget", this);
         
         getScript().execute(this, cycle, TapestryUtils.getPageRenderSupport(cycle, this), parms);
     }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script Sun Dec 17 11:24:32 2006
@@ -5,6 +5,7 @@
 <script>
 <input-symbol key="clientId" required="yes" />
 <input-symbol key="props" required="yes" />
+<input-symbol key="widget" required="yes" />
     <body>
         <unique>
             dojo.require("dojo.widget.Manager");
@@ -13,6 +14,6 @@
         </unique>
     </body>
     <initialization>
-        tapestry.widget.synchronizeWidgetState("${clientId}", "dropdowntimepicker", ${props});
+        tapestry.widget.synchronizeWidgetState("${clientId}", "dropdowntimepicker", ${props}, ${widget.destroy});
     </initialization>
-</script>
\ No newline at end of file
+</script>

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java Sun Dec 17 11:24:32 2006
@@ -37,6 +37,7 @@
 import org.apache.tapestry.json.IJSONWriter;
 import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.services.DataSqueezer;
+import org.apache.tapestry.services.ResponseBuilder;
 import org.apache.tapestry.valid.IValidationDelegate;
 import org.apache.tapestry.valid.ValidatorException;
 import org.testng.annotations.Test;
@@ -156,6 +157,7 @@
         IAutocompleteModel model = createModel();
         ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
         DataSqueezer ds = newMock(DataSqueezer.class);
+        ResponseBuilder resp = newMock(ResponseBuilder.class);
         
         IRequestCycle cycle = newMock(IRequestCycle.class);
         IForm form = newMock(IForm.class);
@@ -200,9 +202,12 @@
         
         trainGetElementId(form, component, "fred");
         trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
+        expect(cycle.isRewinding()).andReturn(false).anyTimes();
         
         delegate.setFormComponent(component);
+        
+        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
+        expect(resp.isDynamic()).andReturn(false).anyTimes();
         
         vfs.renderContributions(component, writer, cycle);
         

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java Sun Dec 17 11:24:32 2006
@@ -32,6 +32,7 @@
 import org.apache.tapestry.form.ValidatableFieldSupport;
 import org.apache.tapestry.form.translator.DateTranslator;
 import org.apache.tapestry.json.JSONObject;
+import org.apache.tapestry.services.ResponseBuilder;
 import org.testng.annotations.Test;
 
 
@@ -49,6 +50,7 @@
         ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
         DateTranslator translator = new DateTranslator();
         translator.setPattern("hh:mm a");
+        ResponseBuilder resp = newMock(ResponseBuilder.class);
         
         IRequestCycle cycle = newMock(IRequestCycle.class);
         IForm form = newMock(IForm.class);
@@ -88,9 +90,12 @@
         
         trainGetElementId(form, component, "fred");
         trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
+        expect(cycle.isRewinding()).andReturn(false).anyTimes();
         
         delegate.setFormComponent(component);
+        
+        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
+        expect(resp.isDynamic()).andReturn(false).anyTimes();
         
         vfs.renderContributions(component, writer, cycle);