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/06/05 00:30:55 UTC

svn commit: r411611 - in /tapestry/tapestry4/trunk: examples/TimeTracker/src/context/ examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/ framework/src/java/org/apache/tapestry/ framework/src/java/org/apache/tapestry/components/ framewo...

Author: jkuhnert
Date: Sun Jun  4 15:30:54 2006
New Revision: 411611

URL: http://svn.apache.org/viewvc?rev=411611&view=rev
Log:
Fixed @Any component to render its durned ID finally....Fixed tiny bug on dojo ajax responser builder, added ability to dynamically
choose which components to update from within a listener method.

Modified:
    tapestry/tapestry4/trunk/examples/TimeTracker/src/context/Home.html
    tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/components/Any.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
    tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
    tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js

Modified: tapestry/tapestry4/trunk/examples/TimeTracker/src/context/Home.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/examples/TimeTracker/src/context/Home.html?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/examples/TimeTracker/src/context/Home.html (original)
+++ tapestry/tapestry4/trunk/examples/TimeTracker/src/context/Home.html Sun Jun  4 15:30:54 2006
@@ -6,6 +6,12 @@
 using them.
 </p>
 
+<div jwcid="projectDescription@Any" >
+	<span jwcid="@If" condition="ognl:selectedProject">
+		<span jwcid="@Insert" value="ognl:selectedProject.name" />
+	</span>
+</div>
+
 <form jwcid="taskForm@Form" listener="listener:addTask" >
     <fieldset>
     <legend><span jwcid="@Insert" value="message:new.task"/></legend>
@@ -31,6 +37,5 @@
       <input jwcid="@Submit" value="message:button.add" />
     </div>
     </fieldset>
-    
 </form>
 </span>

Modified: tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java (original)
+++ tapestry/tapestry4/trunk/examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java Sun Jun  4 15:30:54 2006
@@ -17,6 +17,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.EventListener;
 import org.apache.tapestry.annotations.InjectObject;
@@ -68,9 +69,10 @@
     /**
      * Invoked by form to add a new task.
      */
-    public void addTask()
+    public void addTask(IRequestCycle cycle)
     {
         _log.debug("addTask() selected task is " + getSelectedProject().getName());
+        cycle.getResponseBuilder().updateComponent("projectDescription");
     }
     
     /**
@@ -79,8 +81,9 @@
      */
     @EventListener(events = "selectOption", targets = "projectChoose",
             submitForm = "taskForm")
-    public void projectSelected()
+    public void projectSelected(IRequestCycle cycle)
     {
         _log.debug("projectSelected() " + getSelectedProject());
+        // cycle.getResponseBuilder().updateComponent("projectDescription");
     }
 }

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/AbstractComponent.java Sun Jun  4 15:30:54 2006
@@ -286,12 +286,25 @@
             }
             else
                 attribute = value.toString();
-
+            
             writer.attribute(name, attribute);
         }
-
     }
-
+    
+    /**
+     * Overriden by {@link AbstractFormComponent} to provide different 
+     * behaviour. 
+     * 
+     * @param writer
+     * @param cycle
+     */
+    protected void renderIdAttribute(IMarkupWriter writer, IRequestCycle cycle)
+    {
+        String id = getClientId();
+        if (id != null)
+            writer.attribute("id", id);
+    }
+    
     /** @since 4.0 */
     private boolean isFormalParameter(String name)
     {

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/components/Any.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/components/Any.java?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/components/Any.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/components/Any.java Sun Jun  4 15:30:54 2006
@@ -31,7 +31,7 @@
     protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
     {
         String element = getElement();
-
+        
         if (element == null)
             throw new ApplicationRuntimeException(ComponentMessages.anyElementNotDefined(), this,
                     null, null);
@@ -41,8 +41,10 @@
         if (!rewinding)
         {
             writer.begin(element);
-
+            
             renderInformalParameters(writer, cycle);
+            if (!isParameterBound("id"))
+                renderIdAttribute(writer, cycle);
         }
 
         renderBody(writer, cycle);

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java Sun Jun  4 15:30:54 2006
@@ -64,6 +64,16 @@
     void render(IMarkupWriter writer, IRender render, IRequestCycle cycle);
     
     /**
+     * If the component identified by the specified id isn't already set to
+     * be updated, will add it to the response for updating. (Only applicable
+     * in dynamic responses such as XHR/JSON ).
+     * 
+     * @param id
+     *          The {@link IComponent} id to update.
+     */
+    void updateComponent(String id);
+    
+    /**
      * Invoked by {@link PageRenderSupport} to write external js package
      * includes. This method will be invoked for each external script requesting
      * inclusion in the response.

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java Sun Jun  4 15:30:54 2006
@@ -141,6 +141,13 @@
     /** 
      * {@inheritDoc}
      */
+    public void updateComponent(String id)
+    {
+    }
+
+    /** 
+     * {@inheritDoc}
+     */
     public IMarkupWriter getWriter()
     {
         if (_writer == null)

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java Sun Jun  4 15:30:54 2006
@@ -29,8 +29,8 @@
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.NestedMarkupWriter;
 import org.apache.tapestry.engine.NullWriter;
-import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.markup.MarkupWriterSource;
+import org.apache.tapestry.markup.NestedMarkupWriterImpl;
 import org.apache.tapestry.services.RequestLocaleManager;
 import org.apache.tapestry.services.ResponseBuilder;
 import org.apache.tapestry.services.ServiceConstants;
@@ -153,6 +153,15 @@
     /** 
      * {@inheritDoc}
      */
+    public void updateComponent(String id)
+    {
+        if (!_parts.contains(id))
+            _parts.add(id);
+    }
+    
+    /** 
+     * {@inheritDoc}
+     */
     public IMarkupWriter getWriter()
     {
         return _writer;
@@ -263,7 +272,7 @@
      */
     public void render(IMarkupWriter writer, IRender render, IRequestCycle cycle)
     {
-        if (NestedMarkupWriter.class.isInstance(writer)) {
+        if (NestedMarkupWriterImpl.class.isInstance(writer)) {
             render.render(writer, cycle);
             return;
         }
@@ -417,7 +426,6 @@
     boolean contains(IComponent target)
     {
         if (target == null) return false;
-        
         return _parts.contains(getComponentId(target));
     }
     
@@ -429,7 +437,9 @@
      */
     String getComponentId(IComponent comp)
     {
-        String id = null;
+        return comp.getClientId();
+        
+        /* String id = null;
         //form components have id's generated to ensure uniqueness
         if (comp instanceof IFormComponent)
             return ((IFormComponent)comp).getClientId();
@@ -440,5 +450,6 @@
             id = comp.getBinding("id").getObject().toString();
         
         return id;
+        */
     }
 }

Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java Sun Jun  4 15:30:54 2006
@@ -54,7 +54,7 @@
     protected IMarkupWriter _nullWriter = NullWriter.getSharedInstance();
     
     /** Parts that will be updated. */
-    protected List parts = new ArrayList();
+    protected List _parts = new ArrayList();
     
     protected RequestLocaleManager _localeManager;
     
@@ -128,7 +128,7 @@
         Object[] updateParts = cycle
                 .getParameters(ServiceConstants.UPDATE_PARTS);
         for(int i = 0; i < updateParts.length; i++)
-            parts.add(updateParts[i].toString());
+            _parts.add(updateParts[i].toString());
     }
     
     /**
@@ -142,7 +142,7 @@
             IJSONRender json = (IJSONRender) render;
             IComponent component = (IComponent) render;
             
-            if (!parts.contains(component.getId()))
+            if (!_parts.contains(component.getId()))
             {
                 render.render(_nullWriter, cycle);
                 return;
@@ -152,6 +152,15 @@
         }
         
         render.render(_nullWriter, cycle);
+    }
+    
+    /** 
+     * {@inheritDoc}
+     */
+    public void updateComponent(String id)
+    {
+        if (!_parts.contains(id))
+            _parts.add(id);
     }
     
     /**

Modified: tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js?rev=411611&r1=411610&r2=411611&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js (original)
+++ tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js Sun Jun  4 15:30:54 2006
@@ -60,13 +60,43 @@
 		var elms=resp[0].childNodes;
 		for (var i=0; i<elms.length; i++) {
 			var type=elms[i].getAttribute("type");
+			var id=elms[i].getAttribute("id");
 			
 			if (type == "exception") {
 				dojo.log.err("Remote server exception received.");
 				tapestry.presentException(elms[i], kwArgs);
 				return;
 			}
+			
+			if (!id) {
+				dojo.raise("No element id found in ajax-response node.");
+				return;
+			}
+			
+			var node=dojo.byId(id);
+			if (!node) {
+				dojo.log.err("No node could be found to update content in with id " + id);
+				return;
+			}
+			
+			tapestry.loadContent(id, node, elms[i]);
 		}
+	},
+	
+	loadContent:function(id, node, element){
+    	if (element.childNodes && element.childNodes.length > 0) {
+        	for (var i = 0; i < element.childNodes.length; i++) {
+            	if (element.childNodes[i].nodeType != 1) continue;
+				
+            	var nodeId = element.childNodes[i].getAttribute("id");
+            	if (nodeId && nodeId == id) {
+                	element=element.childNodes[i];
+                	break;
+            	}
+        	}
+    	}
+    	
+    	node.innerHTML=tapestry.html.getContentAsString(element);
 	},
 	
 	presentException:function(node, kwArgs) {