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) {