2011-11-17 121 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”的事情。我想这会起作用。