7

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

3 に答える 3

11

users削除後、DBからリロードする必要があります。

だから、一人ではなく

userService.removeUserById(id);

やったほうがいい

userService.removeUserById(id);
users = userService.list();
于 2011-11-18T12:48:22.180 に答える
1

データテーブルが更新されていないようです。update=":userLists"またはupdate = ":lists:userLists"を使用してみてください。':'は、ルートから始まるIDを検索するように指示します。現在、更新するIDが見つからないようです。むしろ、それをp:outputPanelに入れ、IDを付けてから、update = ":panel"のようなことをします。私はそれがうまくいくと思います。

于 2011-11-18T10:59:26.953 に答える
0

リストからではなく、dbでユーザーを使用している場合は、そのユーザーを削除しているようです#{listUsersController.users}-...

メソッドからコードを投稿する必要がuserService.removeUserById(id);あります。そこで何が起こっているのかわかりませんが、ユーザーリストを更新しないと、dataTableが(正常に)更新されることはありません。

于 2011-11-18T07:56:52.503 に答える