Primefaces - обновление данных с помощью commandButton не работает - PullRequest
6 голосов
/ 18 ноября 2011

Я сталкиваюсь с некоторыми проблемами при обновлении таблицы данных с помощью кнопки command. Это файл xhtml:

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

Ответы [ 3 ]

9 голосов
/ 18 ноября 2011

Вам нужно перезагрузить users из БД после удаления.

Таким образом, вместо одного

userService.removeUserById(id);

вы должны сделать

userService.removeUserById(id);
users = userService.list();
0 голосов
/ 18 ноября 2011

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

0 голосов
/ 18 ноября 2011

Кажется, вы удаляете пользователя в БД, если используете его, а не из списка - #{listUsersController.users} ...

Вы должны опубликовать код из метода: userService.removeUserById(id); Я не могу сказать, что там происходит, но если вы не обновляете список пользователей, таблица данных никогда не будет (успешно) обновлена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...