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>&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="duration@Any">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="duration@Any">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="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.