2013-04-09 18 views

回答

1

問題的癥結在於,但所要求的解決方案並非正確,並且在JSF —中不容易實現,您需要自制一個自定義命令鏈接渲染器,該渲染器專爲在數據表中的使用而設計並能夠識別具體實體。

正確的解決辦法是發送一個redirect to the same view after POST

public String delete() { 
    // ... 
    return FacesContext.getCurrentInstance().getViewRoot().getViewId() + "?faces-redirect=true"; // Feel free to hardcode the view ID, though. 
} 

(如果你打算沿着這顯示一些面消息,use the flash scope

然後刷新瀏覽器將導致只重定向被刷新,而不是POST操作。

另一種方法是通過ajax提交。

<h:commandLink ...> 
    <f:ajax execute="@form" render="@form" /> 
</h:commandLink> 

然後瀏覽器刷新只會重新執行最後一個同步請求,這將是打開相關頁面的初始GET請求。

+0

這是偉大的,解決了這個問題,但我可能需要很多工作來適應我的代碼,有沒有什麼辦法可以清除請求標頭,或任何攜帶行動信息? – 2013-04-10 10:56:50

+0

不客氣。不,您無法清除已發送的請求。你只能告訴客戶發送一個新的和冪等的請求。這基本上就是重定向所做的迴應。沒有魔力。只需咬緊牙關,在適用的情況下修復當前的應用程序,並從未來Web項目中學到的基本Web開發經驗中獲益。請注意,這個問題不是特定於JSF,而是一般的Web開發。 – BalusC 2013-04-10 10:59:20

+0

好,再次感謝你,你真的幫了我很多 – 2013-04-10 11:15:32

相關問題