2013-04-09 74 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