【问题标题】:Struts2 Migration from Struts1 using struts2-struts1-plugin使用 struts2-struts1-plugin 从 Struts1 迁移 Struts2
【发布时间】: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>

【问题讨论】:

标签: struts2 struts-1


【解决方案1】:

在 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2016-10-16
    • 2012-05-21
    • 2014-03-08
    相关资源
    最近更新 更多