我终于可以让 execandwait 拦截器在我的 struts2 应用程序中执行文件上传操作。用户选择文件并点击提交后,会显示等待页面,然后根据上传结果显示成功或错误页面。当这一切都在我们的开发环境(Tomcat 服务器)上起作用时,感觉非常有成就感。
但是,我现在在尝试使相同的代码在 Weblogic 10.3 上工作时遇到问题。在 Weblogic 上:选择文件并单击提交后,显示等待页面,第一次刷新后出现 nullPointerException(详情如下)
class java.lang.NullPointerException
Error Message:
Stack Trace:
com.actions.myAction.upload(myAction.java:80)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)
org.apache.struts2.interceptor.BackgroundProcess$1.run(BackgroundProcess.java:57)
java.lang.Thread.run(Thread.java:619)
在调试时,我看到每次刷新等待页面时,控件实际上都会进入 myAction 类,这不是 execAndWait 拦截器应该如何工作的(??)
谁能帮我解决这个问题?execAndWaitInterceptor 在 Tomcat 和 Weblogic 上的工作方式有什么区别?
注意:如果没有 execAndWait 拦截器,文件上传实用程序也可以在 Weblogic 上正常工作。
struts.xml
<action name=myAction" class="myActionClass" method="myMethod">
<interceptor-ref name="completeStack" />
<interceptor-ref name="execAndWait">
<param name="delay">1000</param>
<param name="delaySleepInterval">500</param>
</interceptor-ref>
<result name="wait">/WEB-INF/pages/wait.jsp</result>
<result name="success">/WEB-INF/pages/success.jsp</result>
<result name="input">/WEB-INF/pages/inputPage.jsp</result>
</action>
等待.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="refresh" content="5;url=<s:url includeParams="all" />"/>
</head>
<body>
<h1>Struts 2 execAndWait example</h1>
<h3>Please wait ...</h3>
</body>
</html>
TIA