You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2008/02/29 23:29:05 UTC
svn commit: r632466 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry/internal/
main/java/org/apache/tapestry/internal/services/ test/app1/
test/java/org/apache/tapestry/integration/
test/java/org/apache/tapestry/integrati...
Author: hlship
Date: Fri Feb 29 14:28:58 2008
New Revision: 632466
URL: http://svn.apache.org/viewvc?rev=632466&view=rev
Log:
TAPESTR-2209: JSONObject response contains additional {}
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/InternalConstants.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentEventRequestHandler.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/JSONObjectEventResultProcessor.java
tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ZoneDemo.tml
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/ZoneDemo.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/InternalConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/InternalConstants.java?rev=632466&r1=632465&r2=632466&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/InternalConstants.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/InternalConstants.java Fri Feb 29 14:28:58 2008
@@ -76,6 +76,13 @@
*/
public static final String IMMEDIATE_RESPONSE_PAGE_ATTRIBUTE = "tapestry.immediate-response-page";
+ /**
+ * Required MIME type for JSON responses. If this MIME type is not used, the client-side
+ * Prototype code will not recognize the response as JSON, and the Ajax.Response.responseJSON property
+ * will be null.
+ */
+ public static final String JSON_MIME_TYPE = "application/json";
+
private InternalConstants()
{
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentEventRequestHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentEventRequestHandler.java?rev=632466&r1=632465&r2=632466&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentEventRequestHandler.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxComponentEventRequestHandler.java Fri Feb 29 14:28:58 2008
@@ -93,11 +93,20 @@
_environment.pop(ComponentEventResultProcessor.class);
- if (_queue.isPartialRenderInitialized())
+ // isAborted() will be true when a non-null value was returned from the event handler method.
+ // Some return types will initialize the PageRenderQueue, others will stream a response directly.
+
+ if (callback.isAborted())
{
- _partialRenderer.renderPartialPageMarkup();
+ if (_queue.isPartialRenderInitialized())
+ {
+ _partialRenderer.renderPartialPageMarkup();
+ }
+
return;
}
+
+ // Send an empty JSON reply if no value was returned from the component event handler method.
JSONObject reply = new JSONObject();
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java?rev=632466&r1=632465&r2=632466&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/AjaxPartialResponseRendererImpl.java Fri Feb 29 14:28:58 2008
@@ -55,7 +55,7 @@
InternalConstants.CONTENT_TYPE_ATTRIBUTE_NAME);
String charset = pageContentType.getParameter(InternalConstants.CHARSET_CONTENT_TYPE_PARAMETER);
- ContentType contentType = new ContentType("application/json");
+ ContentType contentType = new ContentType(InternalConstants.JSON_MIME_TYPE);
contentType.setParameter(InternalConstants.CHARSET_CONTENT_TYPE_PARAMETER, charset);
MarkupWriter writer = _factory.newMarkupWriter(pageContentType);
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/JSONObjectEventResultProcessor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/JSONObjectEventResultProcessor.java?rev=632466&r1=632465&r2=632466&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/JSONObjectEventResultProcessor.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/JSONObjectEventResultProcessor.java Fri Feb 29 14:28:58 2008
@@ -17,6 +17,7 @@
import org.apache.tapestry.json.JSONObject;
import org.apache.tapestry.services.ComponentEventResultProcessor;
import org.apache.tapestry.services.Response;
+import org.apache.tapestry.internal.InternalConstants;
import java.io.IOException;
import java.io.PrintWriter;
@@ -38,7 +39,7 @@
public void processResultValue(JSONObject value) throws IOException
{
- PrintWriter pw = _response.getPrintWriter("text/javascript");
+ PrintWriter pw = _response.getPrintWriter(InternalConstants.JSON_MIME_TYPE);
pw.print(value.toString());
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ZoneDemo.tml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ZoneDemo.tml?rev=632466&r1=632465&r2=632466&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ZoneDemo.tml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/app1/ZoneDemo.tml Fri Feb 29 14:28:58 2008
@@ -39,6 +39,9 @@
<li t:type="loop" source="names" value="name">
<t:actionlink t:id="select" context="name" zone="output">Select "${name}"</t:actionlink>
</li>
+ <li>
+ <t:actionlink t:id="JSON" zone="output">Direct JSON response</t:actionlink>
+ </li>
</ul>
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?rev=632466&r1=632465&r2=632466&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/IntegrationTests.java Fri Feb 29 14:28:58 2008
@@ -1244,10 +1244,12 @@
// HTML entities.
click("select_0");
- // And that's as far as we can go currently, because
+ // And that's as far as we can go currently, because
// of limitations in Selenium 0.8.3 and bugs in Selenium 0.9.2.
- // assertTextPresent("Selected: Mr. <Roboto>");
+ // assertTextPresent("Selected: Mr. <Roboto>");
+
+ click("link=Direct JSON response");
}
/**
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/ZoneDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/ZoneDemo.java?rev=632466&r1=632465&r2=632466&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/ZoneDemo.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/integration/app1/pages/ZoneDemo.java Fri Feb 29 14:28:58 2008
@@ -20,6 +20,7 @@
import org.apache.tapestry.corelib.components.Form;
import org.apache.tapestry.integration.app1.data.RegistrationData;
import org.apache.tapestry.ioc.annotations.Inject;
+import org.apache.tapestry.json.JSONObject;
import org.slf4j.Logger;
public class ZoneDemo
@@ -35,7 +36,7 @@
@ApplicationState
private RegistrationData _registration;
- private static final String[] NAMES = {"Fred & Wilma", "Mr. <Roboto>", "Grim Fandango", "Registration"};
+ private static final String[] NAMES = { "Fred & Wilma", "Mr. <Roboto>", "Grim Fandango", "Registration" };
@Inject
private Block _showName;
@@ -90,5 +91,14 @@
public RegistrationData getRegistration()
{
return _registration;
+ }
+
+ Object onActionFromJSON()
+ {
+ JSONObject response = new JSONObject();
+
+ response.put("content", "Directly coded JSON content");
+
+ return response;
}
}