2016-06-29 15 views
0

私はモーダルダイアログを持っています。ユーザーは、別のユーザーに基づいてロールを選択および選択解除し、更新するためにデータベースに送信できます。PrimeFaces ManyCheckbox ArrayListがモーダルダイアログ内で更新されない

しかし、デバッグの後、ManyCheckboxをバックアップArrayListは更新されない、とselectedRolesArrayListが、それはもともと何だったかに残っています。例えば

  1. 私はアプリケーションに

  2. をロードする役割を持つデータベース内の1人のユーザー管理」

  3. 私は、このユーザーを編集しようとするとダイアログが開きますがあります「管理者」チェックボックスが選択されています。

  4. 私は、「ユーザー」役割のチェックボックスをクリックして、

  5. selectedRoles配列は、ここで代わりに「管理者」と「ユーザーの

のまだばかりにadmin 'です私ですが提出クリックダイアログモーダル:

<p:dialog header="Editing User ID: #{usersView.viewUser}" id="editUserDialog" widgetVar="editUserDialog" modal="true" appendTo="@(body)"> 
    <h:form id="editUserForm"> 
     <p:selectManyCheckbox id="roleSelect" value="#{usersView.selectedRoles}" layout="grid" columns="3"> 
      <f:selectItems value="#{rolesView.roles}" var="role" itemLabel="#{role.name}" itemValue="#{role.name}" /> 
     </p:selectManyCheckbox> 
     <p:separator /> 
     <p:commandButton process="@this" update=":form:tabs:adminView:userTable:userRoleOutput" value="Submit" id="EditUserSubmitButton" actionListener="#{usersView.editUserRole}" oncomplete="PF('editUserDialog').hide();" /> 
    </h:form> 
</p:dialog> 

UserView:

@ManagedBean(name="usersView", eager=true) 
@ApplicationScoped 

private ArrayList<String> selectedRoles; 

public Arraylist<String> getSelectedRoles() 
{ 
    return this.selectedRoles; 
} 

public void setSelectedRoles(ArrayList<String> roles) 
{ 
    this.selectedRoles = roles; 
} 

public void editUserRole(ActionEvent actionEvent) 
{ 
    // This method literally just loops through all users and matches the one we're looking at 
    User user = findUser(); 

    if (user != null) 
    { 
     // gives user checked roles in database and local session 
     addSelectedRoles(user); 

     ArrayList<String> rolesToRemove = user.getRoleNames(); 
     rolesToRemove.removeAll(selectedRoles); 

     // removes user unchecked roles in database and local session 
     removeSelectedRoles(user, rolesToRemove); 
    } 

    else 
    { 
     // Handle exception... 
    } 
} 

私は制限されたVMで作業しているため、コピー&ペーストできません。これは私が投稿できるすべての情報ですが、これで十分です。

ご協力いただきまして誠にありがとうございます。

+0

@BalusC私の悪い、stackoverflowは常にタグとしてそれをお勧めします、私は将来の質問でこれを念頭に置いておきます。 – James

+0

バッキングビーンコードを投稿することができます – Ankit

+0

@Ankit私はこれを今投稿しました。 – James

答えて

0

process="@this"を削除して問題を解決しましたが、今度はArrayListが更新されています。

process="@this"は、コマンドリンクの現在のコンポーネント、つまりなぜ更新していないのかを示します。

関連する問題