我需要一种方法来管理DataTable中commandlink ID的创建,问题是当我用它来删除记录并中断页面的渲染(通过'ctrl + f5'重新加载它)时,它会分配与另一个链接按钮相同的id,导致删除包含它的行。
答案 0 :(得分: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请求。