簡體   English   中英

actionforward的重定向屬性在基於struts portlet bridge的portlet(JSR-168)中不起作用

[英]Redirect attribute of actionforward does not work in struts portlet bridge based portlet (JSR-168)

我做了很多關於此事的研究,但似乎無法找到我的問題的答案,所以我希望你們可以幫助我。

我們有一個struts 1.2.7 Web應用程序,我們使用Apache Struts Portlet Bridge轉換為JSR-168 portlet。

這一切都很有效,除了一件事:指定重定向的actionforwards實際上並不重定向到指定的操作。 當應用程序作為普通的struts web應用程序運行時,這些重定向可以正常工作。 因此,我們在portlet變體中有一個雙重提交問題。

我們使用動作鏈,最后以動作轉發到拼貼定義。 例如:

<action path="/CreateIdmAccountSubmit"  validate="true"   input="catalog.createaccount.page" type="com.konakart.actions.login.CreateIdmAccountSubmitAction" name="CreateIdmAccountForm">
        <forward name="FillRegistrationData" path="/FillRegistrationData.do" redirect="true"/>
    </action>

<action path="/FillRegistrationData" validate="false" type="com.konakart.actions.registration.FillRegistrationDataAction" name="FillRegistrationDataForm">
        <forward name="FillRegistrationDataPage" path="/FillRegistrationDataPage.do" redirect="false"/>
    </action>

<action path="/FillRegistrationDataPage" forward="order.registrationdata.page"/> (tiles-def)

在此示例中,action / CreateIdmAccountSubmit處理提交的表單(POST)並在db中創建一個帳戶。 在成功創建之后,用戶被重定向到另一個動作( / FillRegistrationData ),該動作進入訂單對象,並且輪流轉發到訂單注冊頁面,該布局在tiles-defs.xml中定義。

正如我所說,這一切都很有效,形成一個功能透視圖,但是當用戶在渲染的訂單 - 注冊頁面上點擊f5時,再次調用action / CreateIdmAccountSubmit導致帳戶被創建為double。 正如我所說,當應用程序作為普通的Web應用程序運行時,這種情況並沒有發生。 在這里,機制完美地工作:)

我認為問題是由於重定向是在錯誤的階段完成的事實,但我真的不確定為什么這不起作用:)

基於我讀到的內容,我嘗試了解決重定向問題的方法:*在struts-portlet-config.xml中指定執行表單提交為“actionUrl”的操作(希望重定向在錯誤的階段完成?)*替換struts-portlet變種的普通html標簽庫(希望我的html:form生成一個有效的url actionUrl,以某種方式使重定向成為可能?)

這兩個步驟似乎沒有幫助,我迷失了如何在portlet中完成一個簡單的重定向,以便我們可以防止雙重提交問題。

希望你們能幫助我!

我找到了答案:機制依賴於門戶實現。 我們使用Liferay,默認情況下不能使用重定向。

但是,您可以通過聲明一個名為liferay-portlet.xml的元素來打開它

<action-url-redirect>true</action-url-redirect>

這為我們解決了問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM