0

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

这是我在 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>

其中 'userForm' 是表单的 if。对话框按钮不在 p:datatable 中。我在 bean 中的代码:

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();
   recreatePagination();
   recreateModel();
 }
 return "UserDetails";
}

数据表和表单代码:

<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>

UserDetails 是我拥有此表的 jsf 页面。如果您注意到我从 bean 返回了几条消息。这工作正常,但我不明白为什么表没有刷新。有人可以告诉我为什么吗?

4

2 回答 2

1

你在更新 mybean.usersList 吗?我不知道 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";
}
于 2013-10-12T15:23:28.227 回答
0

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

于 2013-10-10T20:59:10.877 回答