You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by pl...@apache.org on 2006/05/19 22:00:43 UTC
svn commit: r407897 - in /struts/action2/trunk/core/src/main:
java/org/apache/struts/action2/interceptor/
java/org/apache/struts/action2/quickstart/ resources/
resources/org/apache/struts/action2/interceptor/
resources/org/apache/struts/action2/interce...
Author: plightbo
Date: Fri May 19 13:00:43 2006
New Revision: 407897
URL: http://svn.apache.org/viewvc?rev=407897&view=rev
Log:
- avoid NPE in XworkException
- executeAndWait interceptor is smarter now (works with validation). it's still ugly, but much better
- console doesn't spit out the full URL w/ params
- some fixes left over from refactoring in quickstart
Modified:
struts/action2/trunk/core/src/main/java/org/apache/struts/action2/interceptor/ExecuteAndWaitInterceptor.java
struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/MultiWebApplicationContext.java
struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/QuickStart.java
struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/debugging/console.ftl
struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/wait.ftl
struts/action2/trunk/core/src/main/resources/struts-default.xml
Modified: struts/action2/trunk/core/src/main/java/org/apache/struts/action2/interceptor/ExecuteAndWaitInterceptor.java
URL: http://svn.apache.org/viewvc/struts/action2/trunk/core/src/main/java/org/apache/struts/action2/interceptor/ExecuteAndWaitInterceptor.java?rev=407897&r1=407896&r2=407897&view=diff
==============================================================================
--- struts/action2/trunk/core/src/main/java/org/apache/struts/action2/interceptor/ExecuteAndWaitInterceptor.java (original)
+++ struts/action2/trunk/core/src/main/java/org/apache/struts/action2/interceptor/ExecuteAndWaitInterceptor.java Fri May 19 13:00:43 2006
@@ -22,6 +22,7 @@
import com.opensymphony.xwork.ActionProxy;
import com.opensymphony.xwork.config.entities.ResultConfig;
import com.opensymphony.xwork.interceptor.Interceptor;
+import com.opensymphony.xwork.interceptor.MethodFilterInterceptor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -157,7 +158,7 @@
* <!-- END SNIPPET: example -->
*
*/
-public class ExecuteAndWaitInterceptor implements Interceptor {
+public class ExecuteAndWaitInterceptor extends MethodFilterInterceptor {
private static final long serialVersionUID = -2754639196749652512L;
@@ -177,22 +178,31 @@
return new BackgroundProcess(name + "BackgroundThread", actionInvocation, threadPriority);
}
- public String intercept(ActionInvocation actionInvocation) throws Exception {
+ protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
ActionProxy proxy = actionInvocation.getProxy();
String name = proxy.getActionName();
ActionContext context = actionInvocation.getInvocationContext();
Map session = context.getSession();
+ Boolean secondTime = (Boolean) context.get(KEY);
+ if (secondTime == null) {
+ context.put(KEY, true);
+ secondTime = false;
+ } else {
+ secondTime = true;
+ }
+
synchronized (session) {
BackgroundProcess bp = (BackgroundProcess) session.get(KEY + name);
- if (bp == null) {
+ if (secondTime && bp == null) {
bp = getNewBackgroundProcess(name, actionInvocation, threadPriority);
session.put(KEY + name, bp);
performInitialDelay(bp); // first time let some time pass before showing wait page
+ secondTime = false;
}
- if (!bp.isDone()) {
+ if (!secondTime && bp != null && !bp.isDone()) {
actionInvocation.getStack().push(bp.getAction());
Map results = proxy.getConfig().getResults();
if (!results.containsKey(WAIT)) {
@@ -202,12 +212,12 @@
"'! This requires FreeMarker support and won't work if you don't have it installed");
// no wait result? hmm -- let's try to do dynamically put it in for you!
ResultConfig rc = new ResultConfig(WAIT, "org.apache.struts.action2.views.freemarker.FreemarkerResult",
- Collections.singletonMap("location", "org/apache/struts/action2/interceptor/wait.ftl"));
+ Collections.singletonMap("location", "/org/apache/struts/action2/interceptor/wait.ftl"));
results.put(WAIT, rc);
}
return WAIT;
- } else {
+ } else if (!secondTime && bp != null && bp.isDone()) {
session.remove(KEY + name);
actionInvocation.getStack().push(bp.getAction());
@@ -217,6 +227,12 @@
}
return bp.getResult();
+ } else {
+ // this is the first instance of the interceptor and there is no existing action
+ // already run in the background, so let's just let this pass through. We assume
+ // the action invocation will be run in the background on the subsequent pass through
+ // this interceptor
+ return actionInvocation.invoke();
}
}
}
Modified: struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/MultiWebApplicationContext.java
URL: http://svn.apache.org/viewvc/struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/MultiWebApplicationContext.java?rev=407897&r1=407896&r2=407897&view=diff
==============================================================================
--- struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/MultiWebApplicationContext.java (original)
+++ struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/MultiWebApplicationContext.java Fri May 19 13:00:43 2006
@@ -87,8 +87,8 @@
// Alright, let's just hack this to work in IDEA
if (uriInContext.equals("/struts-action")) {
// we do this check to support both "quickstart:showcase" and "quickstart" (using quickstart.xml)
- if (new File("../../action/src/main/resources/META-INF/taglib.tld").exists()) {
- return FileResource.newResource("../../action/src/main/resources/META-INF/taglib.tld");
+ if (new File("../../core/src/main/resources/META-INF/taglib.tld").exists()) {
+ return FileResource.newResource("../../core/src/main/resources/META-INF/taglib.tld");
} else {
return FileResource.newResource("src/main/resources/META-INF/taglib.tld");
}
Modified: struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/QuickStart.java
URL: http://svn.apache.org/viewvc/struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/QuickStart.java?rev=407897&r1=407896&r2=407897&view=diff
==============================================================================
--- struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/QuickStart.java (original)
+++ struts/action2/trunk/core/src/main/java/org/apache/struts/action2/quickstart/QuickStart.java Fri May 19 13:00:43 2006
@@ -174,7 +174,8 @@
System.out.println("");
System.out.println("********************************************************");
System.out.println("Quick-started at http://localhost:" + c.getPort() + c.getContext());
- System.out.println("You may now edit your Java source files and web files.");
+ System.out.println("You may now edit your Java classes and web files without");
+ System.out.println(" deploying or restarting.");
System.out.println("********************************************************");
}
Modified: struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/debugging/console.ftl
URL: http://svn.apache.org/viewvc/struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/debugging/console.ftl?rev=407897&r1=407896&r2=407897&view=diff
==============================================================================
--- struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/debugging/console.ftl (original)
+++ struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/debugging/console.ftl Fri May 19 13:00:43 2006
@@ -1,7 +1,7 @@
<html>
<head>
<script language="javascript">
- var baseUrl = "<@ww.url value="/struts"/>";
+ var baseUrl = "<@saf.url value="/struts" includeParams="none"/>";
window.open(baseUrl+"/webconsole.html", 'OGNL Console','width=500,height=450,'+
'status=no,toolbar=no,menubar=no');
</script>
Modified: struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/wait.ftl
URL: http://svn.apache.org/viewvc/struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/wait.ftl?rev=407897&r1=407896&r2=407897&view=diff
==============================================================================
--- struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/wait.ftl (original)
+++ struts/action2/trunk/core/src/main/resources/org/apache/struts/action2/interceptor/wait.ftl Fri May 19 13:00:43 2006
@@ -1,6 +1,6 @@
<html>
<head>
- <meta http-equiv="refresh" content="5;url=<@ww.url includeParams="all"/>"/>
+ <meta http-equiv="refresh" content="5;url=<@saf.url includeParams="none"/>"/>
</head>
<body>
Please wait while we process your request...
Modified: struts/action2/trunk/core/src/main/resources/struts-default.xml
URL: http://svn.apache.org/viewvc/struts/action2/trunk/core/src/main/resources/struts-default.xml?rev=407897&r1=407896&r2=407897&view=diff
==============================================================================
--- struts/action2/trunk/core/src/main/resources/struts-default.xml (original)
+++ struts/action2/trunk/core/src/main/resources/struts-default.xml Fri May 19 13:00:43 2006
@@ -94,13 +94,6 @@
<interceptor-ref name="basicStack"/>
</interceptor-stack>
- <!-- Sample execute and wait stack.
- Note: execAndWait should always be the *last* interceptor. -->
- <interceptor-stack name="executeAndWaitStack">
- <interceptor-ref name="basicStack"/>
- <interceptor-ref name="execAndWait"/>
- </interceptor-stack>
-
<!-- An example of the params-prepare-params trick. This stack
is exactly the same as the defaultStack, except that it
includes one extra interceptor before the prepare interceptor:
@@ -171,6 +164,18 @@
old name -->
<interceptor-stack name="completeStack">
<interceptor-ref name="defaultStack"/>
+ </interceptor-stack>
+
+ <!-- Sample execute and wait stack.
+ Note: execAndWait should always be the *last* interceptor. -->
+ <interceptor-stack name="executeAndWaitStack">
+ <interceptor-ref name="execAndWait">
+ <param name="excludeMethods">input,back,cancel</param>
+ </interceptor-ref>
+ <interceptor-ref name="defaultStack"/>
+ <interceptor-ref name="execAndWait">
+ <param name="excludeMethods">input,back,cancel</param>
+ </interceptor-ref>
</interceptor-stack>
</interceptors>