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="[EMAIL PROTECTED]" 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>&nbsp;</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="[EMAIL PROTECTED]">18 minutes</div></td>
-      <td>&nbsp;</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>&nbsp;</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>&nbsp;</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="[EMAIL PROTECTED]">18 minutes</div></td>
+                <td>&nbsp;</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>&nbsp;</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="[EMAIL PROTECTED]" 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="[EMAIL PROTECTED]">
                <span jwcid="@If" condition="ognl:showSubProject" 
renderTag="false">
                        <form jwcid="@Form">
-                               Another: <select jwcid="[EMAIL PROTECTED]" 
model="ognl:projectModel" value="ognl:subProject" 
displayName="message:choose.project" />
-                       </form>
+                Another: <select jwcid="[EMAIL PROTECTED]" 
model="ognl:projectModel" value="ognl:subProject" 
displayName="message:choose.project" />
+            </form>
                </span>
        </span>
-       </div>
+    </div>
 </div>
 
 <div jwcid="[EMAIL PROTECTED]" >
-       <h2 jwcid="@If" condition="ognl:selectedProject" style="clear:left" >
-               <span jwcid="[EMAIL PROTECTED]" minWidth="250" 
value="ognl:selectedProject.name" />
-       </h2>
+    <h2 jwcid="@If" condition="ognl:selectedProject" style="clear:left" >
+        <span jwcid="[EMAIL PROTECTED]" 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.


Reply via email to