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();
+
/**
* [EMAIL PROTECTED]
*/
@@ -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"] && ${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);