2015-09-27 254 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>