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 2007/05/03 20:05:20 UTC
svn commit: r534949 - in /tapestry/tapestry4/trunk:
tapestry-examples/TimeTracker/src/context/
tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/
tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/
tapestry-fr...
Author: jkuhnert
Date: Thu May 3 11:05:19 2007
New Revision: 534949
URL: http://svn.apache.org/viewvc?view=rev&rev=534949
Log:
Fixes bug where a client side target id wasn't being matched against component id's because the IdAllocator portion of the string was interfering with the match.
Modified:
tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html
tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java
Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html?view=diff&rev=534949&r1=534948&r2=534949
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html Thu May 3 11:05:19 2007
@@ -10,77 +10,77 @@
</p>
<form jwcid="taskForm@Form" class="container" clientValidationEnabled="true" >
-<h3><span jwcid="@Insert" value="message:new.task">Task Entry</span></h3>
- <fieldset>
- <table width="90%" class="form" cellpadding="2" cellspacing="0" >
- <tr>
- <td><label jwcid="@FieldLabel" field="component:projectChoose">Choose Project</label></td>
- <td><label jwcid="@FieldLabel" field="component:descriptionField">Description</label></td>
- <td><label>Duration</label></td>
- <td> </td>
- </tr>
- <tr id="secondRow">
- <td><div class="field required"><select jwcid="projectChoose" /></div></td>
- <td><div class="field required"><input jwcid="descriptionField" /></div></td>
- <td><div jwcid="duration@Any">18 minutes</div></td>
- <td> </td>
- </tr>
-
- <tr>
- <td><label jwcid="@FieldLabel" field="component:datePicker">Date Picker</label></td>
- <td><label jwcid="@FieldLabel" field="component:startPicker">Start Picker</label></td>
- <td><label jwcid="@FieldLabel" field="component:endPicker">End Picker</label></td>
- <td> </td>
- </tr>
-
- <tr>
- <td><div class="field required"><input jwcid="datePicker" /></div></td>
- <td>
- <div class="field required">
- <input jwcid="startPicker" />
- </div>
- </td>
- <td>
- <div class="field required">
- <input jwcid="endPicker" />
- </div>
- </td>
- <td>
- <input jwcid="@Submit" value="message:button.add" class="submitButton"
- action="listener:addTask"
- async="true" updateComponents="taskForm" />
- </td>
- </tr>
- </table>
+ <h3><span jwcid="@Insert" value="message:new.task">Task Entry</span></h3>
+ <fieldset>
+ <table width="90%" class="form" cellpadding="2" cellspacing="0" >
+ <tr>
+ <td><label jwcid="@FieldLabel" field="component:projectChoose">Choose Project</label></td>
+ <td><label jwcid="@FieldLabel" field="component:descriptionField">Description</label></td>
+ <td><label>Duration</label></td>
+ <td> </td>
+ </tr>
+ <tr id="secondRow">
+ <td><div class="field required"><select jwcid="projectChoose" /></div></td>
+ <td><div class="field required"><input jwcid="descriptionField" /></div></td>
+ <td><div jwcid="duration@Any">18 minutes</div></td>
+ <td> </td>
+ </tr>
+
+ <tr>
+ <td><label jwcid="@FieldLabel" field="component:datePicker">Date Picker</label></td>
+ <td><label jwcid="@FieldLabel" field="component:startPicker">Start Picker</label></td>
+ <td><label jwcid="@FieldLabel" field="component:endPicker">End Picker</label></td>
+ <td> </td>
+ </tr>
+
+ <tr>
+ <td><div class="field required"><input jwcid="datePicker" /></div></td>
+ <td>
+ <div class="field required">
+ <input jwcid="startPicker" />
+ </div>
+ </td>
+ <td>
+ <div class="field required">
+ <input jwcid="endPicker" />
+ </div>
+ </td>
+ <td>
+ <input jwcid="@Submit" value="message:button.add" class="submitButton"
+ action="listener:addTask"
+ async="true" updateComponents="taskForm" />
+ </td>
+ </tr>
+ </table>
</fieldset>
</form>
<a jwcid="@DirectLink" listener="listener:showDialog" updateComponents="testDialog">Show Dialog</a><br/>
<div jwcid="testDialog@Dialog" hidden="ognl:dlHidden" >
- <p style="display:block;background:#ffffff;width:20em;">
- This is content hidden in a Dialog.
+ <p style="display:block;background:#ffffff;width:20em;">
+ This is content hidden in a Dialog.
- <a href="#" onClick="dojo.widget.byId('testDialog').hide();return false">Close</a>
+ <a href="#" onClick="dojo.widget.byId('testDialog').hide();return false">Close</a>
</p>
-
- <div style="display:block;background:#ffffff;width:20em;">
- <a jwcid="@DirectLink" listener="listener:showSubProject" updateComponents="subArea" >Show sub project</a>
+
+ <div style="display:block;background:#ffffff;width:20em;">
+ <a jwcid="@DirectLink" listener="listener:showSubProject" updateComponents="subArea" >Show sub project</a>
<span jwcid="subArea@Any">
<span jwcid="@If" condition="ognl:showSubProject" renderTag="false">
<form jwcid="@Form">
- Another: <select jwcid="subProjectChoose@Autocompleter" model="ognl:projectModel" value="ognl:subProject" displayName="message:choose.project" />
- </form>
+ Another: <select jwcid="subProjectChoose@Autocompleter" model="ognl:projectModel" value="ognl:subProject" displayName="message:choose.project" />
+ </form>
</span>
</span>
- </div>
+ </div>
</div>
<div jwcid="projectDescription@Any" >
- <h2 jwcid="@If" condition="ognl:selectedProject" style="clear:left" >
- <span jwcid="projName@InlineEditBox" minWidth="250" value="ognl:selectedProject.name" />
- </h2>
+ <h2 jwcid="@If" condition="ognl:selectedProject" style="clear:left" >
+ <span jwcid="projName@InlineEditBox" minWidth="250" value="ognl:selectedProject.name" />
+ </h2>
</div>
</span>
Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java?view=diff&rev=534949&r1=534948&r2=534949
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java Thu May 3 11:05:19 2007
@@ -107,7 +107,7 @@
{
getBuilder().updateComponent("projectDescription");
}
-
+
public void showDialog()
{
Dialog dlg = (Dialog)getComponent("testDialog");
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java?view=diff&rev=534949&r1=534948&r2=534949
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java Thu May 3 11:05:19 2007
@@ -28,6 +28,7 @@
import org.apache.tapestry.listener.ListenerInvoker;
import org.apache.tapestry.spec.IComponentSpecification;
import org.apache.tapestry.spec.IEventListener;
+import org.apache.tapestry.util.IdAllocator;
import java.util.*;
@@ -78,9 +79,10 @@
String formIdPath = form.getExtendedId();
String targetId = (String)event.getTarget().get("id");
+ String strippedId = IdAllocator.convertAllocatedComponentId(targetId);
if (targetId == null)
return;
-
+
List comps = getFormEventListeners(formIdPath);
if (comps == null)
return;
@@ -105,7 +107,7 @@
// ensure ~only~ the method that targeted this event gets called!
- if (!listeners[e].getComponentId().endsWith(targetId))
+ if (!listeners[e].getComponentId().endsWith(strippedId))
continue;
// handle disabling focus
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java?view=diff&rev=534949&r1=534948&r2=534949
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/IdAllocator.java Thu May 3 11:05:19 2007
@@ -14,12 +14,12 @@
package org.apache.tapestry.util;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.util.Defense;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* Used to "uniquify" names within a given context. A base name is passed in,
* and the return value is the base name, or the base name extended with a
@@ -82,7 +82,25 @@
_namespace = namespace;
}
-
+
+ /**
+ * Utility for stripping out the standard allocator generated portion of a component id string
+ * in order to get what the most likely original component id was.
+ *
+ * @param input
+ * The generated component id.
+ * @return The id stripped of any allocated id meta, if any was found.
+ */
+ public static String convertAllocatedComponentId(String input)
+ {
+ if (input == null)
+ return null;
+
+ int index = input.indexOf(SEPARATOR);
+
+ return index > -1 ? input.substring(0, index) : input;
+ }
+
/**
* Allocates the id. Repeated calls for the same name will return "name",
* "name_0", "name_1", etc.