Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 删除primefaces p:datatable中的一行后未刷新表_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Jsf 删除primefaces p:datatable中的一行后未刷新表

Jsf 删除primefaces p:datatable中的一行后未刷新表,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,所以我有一个表,它有4列。第4列有一个删除记录的按钮,当按钮被点击时,一个模态对话框打开,然后它要求确认是(或)否。因此,当我单击“是”时,记录将从数据库中删除,并且模态dilog也将关闭,但表不会刷新。如果我手动刷新,则记录不会显示 这是我在JSF中为模态对话框编写的代码: <p:dialog id="modalDialog" header="Delete User?" modal="true" resizable="false" draggable="false" widgetVar

所以我有一个表,它有4列。第4列有一个删除记录的按钮,当按钮被点击时,一个模态对话框打开,然后它要求确认是(或)否。因此,当我单击“是”时,记录将从数据库中删除,并且模态dilog也将关闭,但表不会刷新。如果我手动刷新,则记录不会显示

这是我在JSF中为模态对话框编写的代码:

<p:dialog id="modalDialog" header="Delete User?"  modal="true"
resizable="false" draggable="false" widgetVar="delUserConf">  
  <h:panelGrid id="display" columns="2">
   <h:outputLabel value="Name" style="font-weight: bold"/>
   <h:outputText value="#{userController.selectedBean.firstName}" style="border: none"/>
 </h:panelGrid>
 <p:commandButton oncomplete='delUserConf.hide();' actionListener="#{mybeanr.deleteUser(userController.selectedBean)}"  id="yesDeleteUser" value="#{bundle.ListUserDeleteYes}" update=":userForm"/>
 <p:commandButton id="noDelete" onclick="delUserConf.hide();" action="/views/user/UserManagement.xhtml" value="#{bundle.ListUserDeleteNo}" style="margin-left: 15px;" update=":userForm:dataTab"/>
</p:dialog>
数据表和表单代码:

<h:form id="userForm">
 <p:growl id="growl"  showDetail="true" sticky="true" />
  <div class="dataTableWrap">
   <p:dataTable value="#{mybean.usersList}" var="item" id="dataTab" widgetVar="usersTable" editable="true" rowKey="#{item.emailAddress}">
   have some columns here and just displaying the values of these columns from the beans.
  </p:datatable>
</h:form>

这里有一些列,只显示bean中这些列的值。

UserDetails是jsf页面,我在这里有这个表。如果你注意到我从bean返回了一些消息。这很好,但我不明白为什么表没有被刷新。有人能告诉我为什么吗?

从jsf UI前端删除实体时,该实体没有处于托管状态,
所以您需要合并回托管对象,现在使用emcreateQuery(“”)删除表中存在实体对象的位置,或者您可以执行geList()。从jsf ui中删除(实体)。第一个选项立即从数据库中删除刷新页面,第二个选项删除合并实体,并将其从ui列表中删除

是否正在更新mybean.users列表?我不知道recreatePagination()和recreateModel()做什么,但是,由于您没有使用惰性模型,请在执行销毁后尝试从列表中删除已删除的userbean。差不多

public String deleteUser(UserBean userbean) {
 //do something
 selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();

 if(//condiition checking )
 {
     JsfUtil.addErrorMessage("Not Allowed");
 }
 else
 {
   try {
       //some logic here
       JsfUtil.addSuccessMessage("Success");
   } catch (Exception e) {
       JsfUtil.addErrorMessage("Error");
   }
   //performDestroy();

   usersList.remove(userBean);

   recreatePagination();
   recreateModel();
 }
 return "UserDetails";
}

你能发布表单和数据表代码吗?你有没有检查你是否有javascript错误?在问题中添加了datatable和表单代码…也没有脚本错误..你没有关闭你的div?很抱歉,那只是一个复制粘贴错误,在我的表单中看起来很好。我已关闭div标签。
public String deleteUser(UserBean userbean) {
 //do something
 selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();

 if(//condiition checking )
 {
     JsfUtil.addErrorMessage("Not Allowed");
 }
 else
 {
   try {
       //some logic here
       JsfUtil.addSuccessMessage("Success");
   } catch (Exception e) {
       JsfUtil.addErrorMessage("Error");
   }
   //performDestroy();

   usersList.remove(userBean);

   recreatePagination();
   recreateModel();
 }
 return "UserDetails";
}