繁体   English   中英

Primefaces - 使用commandButton更新数据表不起作用

[英]Primefaces - update datatable with commandButton doesn't work

我通过使用commandButton更新数据表面临一些问题。 这是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>

问题是当单击执行动作listUsersController.deleteUser的commandButton时。 该方法成功执行并删除用户。 但是数据表没有更新。 我希望删除的记录不再出现在带有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;
        }
    }

删除后需要从数据库重新加载users

所以,而不是孤单

userService.removeUserById(id);

你应该做

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

看来你正在删除db中的用户,如果你使用了一个,而不是从列表中删除 - #{listUsersController.users} ...

您应该从方法发布代码: userService.removeUserById(id); 我不知道那里发生了什么,但如果你没有更新用户列表,dataTable将永远不会(成功)更新!

看起来数据表没有刷新,请尝试使用update =“:userLists”或update =“:lists:userLists”,“:”告诉它查找从root开始的id。 目前看起来它无法找到要更新的ID。 相反,将它放在p:outputPanel中,给它一个id然后执行类似update =“:panel”的操作。 我想这会奏效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM