通过我在datatable中的代码更改commandLink Id

时间:2013-04-09 16:02:42

标签: jsf-2 datatable

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

1 个答案:

答案 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请求。