2015-09-27 148 views
-1

我试图使用struts2-struts1-Plugin.jar将Struts1应用程序迁移到Struts2应用程序。Struts2使用struts2-struts1-plugin从Struts1迁移

我已成功迁移。但我遇到了动作链问题。行动链不按预期工作。但是,Action Redirect按预期工作。

如果我提供动作类型作为链而不是执行下一个动作它调用同一个动作类,而在调试时我能够看到在struts2-struts1里面的setClasname方法第一次调用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> 
+0

连锁行动鼓励和S1插件应该已经被弃用。该代码如果在这种情况下不起作用,则对观众的兴趣不大。 –

+0

你需要一个'chain'拦截器。罗马人也说过。 –

+0

感谢您的回复。我有我的问题的解决方案,我会尽快发布。 – ThirumalMarugan

回答

0

在struts.xml中为fetchInboxAction而不是提供完整的拦截器栈仅所需的形式拦截器将通行证由于扩孔拦截已援引作为该请求的一部分。

经过以下更改Action下巴正在工作没有任何问题。

改良的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>