You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ja...@apache.org on 2011/01/31 21:16:39 UTC
svn commit: r1065743 - in /struts/struts2/trunk/plugins/json/src:
main/java/org/apache/struts2/json/JSONInterceptor.java
test/java/org/apache/struts2/json/JSONInterceptorTest.java
Author: jafl
Date: Mon Jan 31 20:16:38 2011
New Revision: 1065743
URL: http://svn.apache.org/viewvc?rev=1065743&view=rev
Log:
WW-3498 Inject values into top of stack (model or action) instead of always using action. This does not break backward compatibility because nobody could use a model before this patch.
Modified:
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java
Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java?rev=1065743&r1=1065742&r2=1065743&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java Mon Jan 31 20:16:38 2011
@@ -83,7 +83,7 @@ public class JSONInterceptor extends Abs
contentType = contentType.substring(0, iSemicolonIdx);
}
- Object rootObject;
+ Object rootObject = null;
if (this.root != null) {
ValueStack stack = invocation.getStack();
rootObject = stack.findValue(this.root);
@@ -91,8 +91,6 @@ public class JSONInterceptor extends Abs
if (rootObject == null) {
throw new RuntimeException("Invalid root expression: '" + this.root + "'.");
}
- } else {
- rootObject = invocation.getAction();
}
if ((contentType != null) && contentType.equalsIgnoreCase("application/json")) {
@@ -106,6 +104,9 @@ public class JSONInterceptor extends Abs
if (dataCleaner != null)
dataCleaner.clean("", json);
+ if (rootObject == null) // model overrides action
+ rootObject = invocation.getStack().peek();
+
// populate fields
populator.populateObject(rootObject, json);
} else {
@@ -121,6 +122,9 @@ public class JSONInterceptor extends Abs
if (obj instanceof Map) {
Map smd = (Map) obj;
+ if (rootObject == null) // model makes no sense when using RPC
+ rootObject = invocation.getAction();
+
// invoke method
try {
result = this.invoke(rootObject, smd);
Modified: struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java?rev=1065743&r1=1065742&r2=1065743&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java (original)
+++ struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONInterceptorTest.java Mon Jan 31 20:16:38 2011
@@ -322,6 +322,7 @@ public class JSONInterceptorTest extends
TestAction action = new TestAction();
this.invocation.setAction(action);
+ this.invocation.getStack().push(action);
interceptor.intercept(this.invocation);