2011-11-17 40 views
6

Tôi đang đối mặt với một số vấn đề bằng cách cập nhật một datatable với một commandButton. Đây là tệp xhtml:Primefaces - cập nhật datatable với commandButton không hoạt động

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

Vấn đề là khi nhấp vào nút lệnh thực hiện danh sách hành độngUsersController.deleteUser. Phương thức được thực thi thành công và người dùng bị xóa. Nhưng các datatable không được cập nhật. Tôi muốn bản ghi bị xóa không xuất hiện nữa trong danh sách bằng ajax.

tôi đã thử nghiệm với update="@form", update="@parent", update="@all", update="usersList", update=":list:usersList" và không có gì hoạt động.

Đây là phương pháp trong 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; 
     } 
    } 

Trả lời

9

Bạn cần tải lại users từ DB sau khi xóa.

Vì vậy, thay vì một mình

userService.removeUserById(id); 

bạn nên làm

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

Cảm ơn bạn rất nhiều. Tôi không biết tại sao tôi quên điều đó. Tải lại danh sách hoạt động tuyệt vời! – jacruzca

0

Có vẻ như bạn đang xóa người dùng trong db, nếu bạn sử dụng một, và không phải từ danh sách - #{listUsersController.users} ...

Bạn nên đăng mã từ phương thức: userService.removeUserById(id); Tôi không thể biết điều gì đang xảy ra trong đó nhưng nếu bạn không cập nhật danh sách người dùng, dataTable sẽ không bao giờ được cập nhật (thành công)!

+0

Cảm ơn bạn. Tôi quên cập nhật danh sách. Bây giờ nó hoạt động. – jacruzca

0

Có vẻ như dữ liệu không làm mới, hãy thử sử dụng update = ": userLists" hoặc update = ": lists: userLists", dấu ':' yêu cầu nó tìm id bắt đầu từ gốc. Hiện tại có vẻ như không thể tìm thấy id để cập nhật. Thay vào đó, hãy đặt nó trong một p: outputPanel, cung cấp cho nó một id và sau đó làm một cái gì đó như update = ": panel". Tôi đoán rằng sẽ làm việc.

Các vấn đề liên quan