1

我需要一种方法来管理 DataTable 中 commandlink ID 的创建,问题是当我使用它来删除记录并中断页面的呈现(通过 'ctrl+f5' 重新加载它)时,它会分配相同的 id另一个链接按钮,这会导致删除包含它的行。

4

1 回答 1

1

有问题的问题是合理的,但请求的解决方案不是正确的解决方案,也不容易在 JSF 中实现 - 基本上,您需要自制一个自定义命令链接渲染器,该渲染器专为在数据表中使用而设计,并且能够识别特定实体。

正确的解决方案是在 POST 之后将重定向发送到同一视图

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

(如果您打算沿它显示一些面孔消息,请使用闪光灯范围

然后,浏览器刷新将导致仅刷新重定向而不是 POST 操作。

另一种方法是通过 ajax 提交。

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

然后,浏览器刷新只会重新执行最后一个同步请求,这将是打开相关页面的初始 GET 请求。

于 2013-04-09T16:08:53.847 回答