2011-11-17 85 views
6

通過使用commandButton更新數據表面,我遇到了一些問題。這是XHTML文件:Primefaces - 使用commandButton更新數據表不起作用

<div class="grid_16"> 
    <h:form id="list"> 
     <p:messages></p:messages> 
     <p:dataTable styleClass="result-table" var="user" id="usersList" 
     value="#{listUsersController.users}" widgetVar="userTable" 
     paginator="true" rows="10" paginatorAlwaysVisible="false"> 
     <f:facet name="header"> 
      Listado de usuarios 
     </f:facet> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.username']}" /> 
      </f:facet> 
      #{user.username} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.name']}" /> 
      </f:facet> 
      #{user.name} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.lastname']}" /> 
      </f:facet> 
      #{user.lastname} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['users.active']}" /> 
      </f:facet> 
      #{user.active} 
     </p:column> 
     <p:column> 
      <f:facet name="header"> 
       <h:outputText value="#{cms['general.actions']}" /> 
      </f:facet> 
      <p:commandButton value="Eliminar" image="ui-icon-trash" 
       actionListener="#{listUsersController.deleteUser}" 
       update="list:usersList"> 
       <f:param name="user" value="#{user.id}" /> 
      </p:commandButton> 
     </p:column> 
     </p:dataTable> 
    </h:form> 
</div> 

的問題是點擊執行動作listUsersController.deleteUser命令按鈕時。該方法成功執行並且用戶被刪除。但數據表沒有更新。我希望刪除的記錄不會再出現在帶有ajax的列表中。

我已經與update="@form"update="@parent"update="@all"update="usersList"update=":list:usersList"測試並沒有什麼作品。

這是managedBean方法:

public String deleteUser() { 
     try { 
      FacesContext fc = FacesContext.getCurrentInstance(); 
      Map<String, String> params = fc.getExternalContext().getRequestParameterMap(); 
      int id = Integer.parseInt(params.get("user")); 
      userService.removeUserById(id); 
      FacesContext.getCurrentInstance().addMessage 
      (null,new FacesMessage(FacesMessage.SEVERITY_INFO,MessageProvider.getMessageProvider() 
      .getValue("cms","users.error.userDoesNotExist"),"")); 
      return SUCCESS; 
     } catch (EntityNotFoundException e) { 
      FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,MessageProvider 
        .getMessageProvider().getValue("cms","users.error.userDoesNotExist"),"")); 
      return ERROR; 
     } 
    } 

回答

9

刪除後需要從數據庫中重新加載users

所以,與其單獨

userService.removeUserById(id); 

你應該做的

userService.removeUserById(id); 
users = userService.list(); 
+0

非常感謝。我不知道爲什麼我忘了那個。重新加載列表非常棒! – jacruzca

0

似乎你刪除數據庫中的用戶,如果你使用一個,而不是從列表 - #{listUsersController.users} ...

你應該從方法發佈代碼:userService.removeUserById(id);我不能說出那裏發生了什麼,但是如果你沒有更新用戶列表,dataTable不會永遠(成功)更新!

+0

謝謝。我忘了更新列表。現在它正在工作。 – jacruzca

0

看起來像數據表不刷新,嘗試使用更新=「:userLists」或更新=「:列表:userLists」,':'告訴它尋找從根開始的ID。目前看起來它無法找到要更新的ID。相反,把它放在一個p:outputPanel中,給它一個id然後做一些類似update =「:panel」的事情。我想這會起作用。