Struts2 使用 struts2-struts1-插件从 Struts1 迁移
Struts2 Migration from Struts1 using struts2-struts1-plugin
我尝试使用 struts2-struts1-Plugin.jar
将 Struts1 应用程序迁移到 Struts2 应用程序。
我已经成功 migrated.But 我有一个关于 Action Chain 的问题。动作链未按预期工作。但是,Action Redirect 正在按预期工作。
如果我将操作类型提供为链而不是执行下一个操作,它会调用相同的操作 class,在调试时我能够在 struts2-struts1 pligin 中看到它setClasname 方法调用两次,第一次设置为正确 class 但第二次设置为上一个操作 class 名称,这是触发错误操作 class 的原因。
有人可以帮我解决这个问题吗?
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>
在 struts.xml 中,对于 fetchInboxAction,不是提供完整的拦截器堆栈,而是只传递所需的表单拦截器,因为扩孔拦截器已经作为此请求的一部分被调用。
经过以下更改后,Action chin 正常工作。
已修改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="InboxForm"/>
<result name="success">/sucess.jsp</result>
<result name="failure">/error.jsp</result>
</action>
</package>
</struts>
我尝试使用 struts2-struts1-Plugin.jar
将 Struts1 应用程序迁移到 Struts2 应用程序。
我已经成功 migrated.But 我有一个关于 Action Chain 的问题。动作链未按预期工作。但是,Action Redirect 正在按预期工作。
如果我将操作类型提供为链而不是执行下一个操作,它会调用相同的操作 class,在调试时我能够在 struts2-struts1 pligin 中看到它setClasname 方法调用两次,第一次设置为正确 class 但第二次设置为上一个操作 class 名称,这是触发错误操作 class 的原因。
有人可以帮我解决这个问题吗?
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>
在 struts.xml 中,对于 fetchInboxAction,不是提供完整的拦截器堆栈,而是只传递所需的表单拦截器,因为扩孔拦截器已经作为此请求的一部分被调用。
经过以下更改后,Action chin 正常工作。
已修改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="InboxForm"/>
<result name="success">/sucess.jsp</result>
<result name="failure">/error.jsp</result>
</action>
</package>
</struts>