我在我的网络应用程序中使用 JSF 和 Primefaces 。
我正在使用primefaces的 p:datatable id =“jobEditTable”组件。
在此我可以选择删除一些行。
在数据表中,我点击该按钮时有一个删除按钮,我正在显示 p:dialog id =“deleteJob” 然后我在 p:对话框中填写一些要删除的信息,然后点击 p:dialog 中的一个命令链接,然后它调用一个动作监听器,我在那里清除数据列表并重新创建。
点击该命令链接我正在更新jobEditTable并隐藏该p:对话框。
<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>
所有工作正常的数据表也令人耳目一新。
但是如果我们在删除和执行该过程之前搜索某些作业,而不是数据表不刷新。的 WHY ??
意思是,数据表是刷新的,如果我没有使用任何过滤器意味着没有搜索,如果我删除一些行然后数据表刷新但是在搜索和删除数据表后不刷新...
为什么表现如此?
我的bean在查看范围。
这是我的 ManagedBean,名为MastersBean
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"));
}
答案 0 :(得分:2)
我认为从数据库中删除项目后,您需要从数组列表中删除所选项目,如:myArrayList.remove(selectedItem);
,不要再从数据库重新加载所有数据! 。
我有这个问题,现在它运作良好。
答案 1 :(得分:0)
尝试在ajax更新中更新dataTable周围的表单:
<h:form id="form1">
....
<p:datatable id="jobEditTable" ..../>
</h:form>
<p:commandLink ... update=":form1"...></p:commandLink>
结果是你在支持bean中缓存的dataTable上显示的结果吗?你可以发布你的支持bean的来源吗?
答案 2 :(得分: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();
}
}
}