【发布时间】:2015-09-27 07:39:59
【问题描述】:
我尝试使用 struts2-struts1-Plugin.jar 将 Struts1 应用程序迁移到 Struts2 应用程序。
我已成功迁移。但我遇到了 Action Chain 的问题。操作链未按预期工作。但是,操作重定向按预期工作。
如果我提供动作类型作为链而不是执行下一个动作它调用相同的动作类,在调试时我能够看到内部 struts2-struts1 pligin setClasname 方法第一次调用了两次它设置为正确的类,但第二次设置为先前的动作类名称,这是触发错误动作类的原因。
有人可以帮我解决这个问题吗?
Struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="PackageName" namespace="/"
extends="struts1-default">
<interceptors>
<interceptor name="LoginForm"
class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor">
<param name="className">com.LoginForm</param>
<param name="name">LoginForm</param>
<param name="scope">request</param>
</interceptor>
<interceptor name="InboxForm"
class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor">
<param name="className">com.InboxForm</param>
<param name="name">InboxForm</param>
<param name="scope">request</param>
</interceptor>
<interceptor-stack name="web">
<interceptor-ref name="staticParams"/>
<interceptor-ref name="LoginForm"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="basicStack"/>
</interceptor-stack>
<interceptor-stack name="web2">
<interceptor-ref name="staticParams"/>
<interceptor-ref name="InboxForm"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="basicStack"/>
</interceptor-stack>
</interceptors>
<action name="LoginAction" class="org.apache.struts2.s1.Struts1Action" method="execute" >
<param name="className">com.LoginAction</param>
<interceptor-ref name="web"/>
<result name="success" type="chain">FetchInboxAction</result>
<result name="failure">/error.jsp</result>
</action>
<action name="FetchInboxAction" class="org.apache.struts2.s1.Struts1Action" method="execute">
<param name="className">com.FetchInboxAction</param>
<interceptor-ref name="web2"/>
<result name="success">/sucess.jsp</result>
<result name="failure">/error.jsp</result>
</action>
</package>
</struts>
【问题讨论】:
-
不鼓励链接操作,并且 S1 插件应该已经被弃用。如果代码在这种情况下不起作用,那么观众对代码的兴趣就会降低。
-
你需要一个
chain拦截器。也是罗曼所说的。 -
感谢您的回复。我有解决问题的方法,我会尽快发布。