2011-11-17 3 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> 

Проблема заключается в том, щелкая CommandButton, выполняющее 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

Похоже, что datatable не освежает, попробуйте использовать update = ": userLists" или update = ": lists: userLists", ':' говорит ему искать идентификатор, начиная с root. В настоящее время похоже, что он не может найти идентификатор для обновления. Скорее, поместите его в p: outputPanel, дайте ему идентификатор, а затем сделайте что-то вроде update = ": panel". Думаю, это сработает.

Смежные вопросы