0

我在我的 Web 应用程序中使用JSFPrimefaces 。

我正在使用primefaces 的p:datatable id="jobEditTable"组件。

在此我可以选择删除一些行。

在数据表中,我在单击该按钮时有一个删除按钮,我正在显示一个 p:dialog id="deleteJob"然后我在p:dialog 中填写一些删除的原因,然后我单击p:dialog中的一个命令链接然后它调用我正在清除数据列表并再次创建的一个动作侦听器。

并且 onClick 该命令链接我正在更新 jobEditTable 并隐藏该 p:dialog。

    <p:datatable id="jobEditTable" value="#{mastersBean.dataList}"..../>
 . . .. . . .  . . .
    <p:commandLink  actionListener="#{tableBean.deleteRow}" update="jobEditTable"  oncomplete="deleteJob.hide()">
               <p:graphicImage value="/images/delete_button.png" />
                 <f:attribute name="model" value="#{tableBean.delCode}"></f:attribute>
                </p:commandLink>

一切正常,数据表也令人耳目一新。

但是 ,如果我们在删除和执行该过程之前搜索一些工作,则数据表不会刷新。为什么??

意思是,如果我不使用任何过滤器而不搜索,则数据表正在刷新如果我删除了某些行,则数据表正在刷新,但在搜索和删除数据表后不刷新..

为什么会这样??

我的 bean 在视图范围内

这是我的名为 MastersBean 的 ManagedBean

  public void deleteDetails(ActionEvent e)
    {
        String id=(String)e.getComponent().getAttributes().get("param");
        ........deleting data from database according to id.........
            dataList.clear();

      ..........updating datalist again....................
        FacesContext context = FacesContext.getCurrentInstance();  

        context.addMessage(null, new FacesMessage("Successfully Deleted"));  

    }
4

3 回答 3

2

我认为从数据库中删除项目后,您需要从数组列表中删除所选项目,例如:myArrayList.remove(selectedItem);,不要再次从数据库中重新加载所有数据!. 我遇到了这个问题,现在它运行良好。

于 2013-06-22T11:50:45.130 回答
0

尝试在 ajax 更新中更新 dataTable 周围的表单:

<h:form id="form1">
....
    <p:datatable id="jobEditTable" ..../>
</h:form>

<p:commandLink ... update=":form1"...></p:commandLink>

结果是您在支持 bean 中缓存的数据表上显示的结果吗?你能发布你的支持bean的来源吗?

于 2012-10-07T19:50:07.340 回答
0

我建议使用ListIterator<Object>

void delete(Object object) {
    ListIterator<Object> iter = myArrayList.listIterator()

    while (iter.hasnext) {
        if (current element == object) {
            ------dataBase call here to delete object----
            iter.remove();
        }
    }
}
于 2017-09-20T20:27:32.880 回答