2011-06-28 2 views
0

私は削除したいデータを選択するために私は自分のdataTableの各行にselectbooleanCheckboxを置いていますが、チェックボックスは状態を変更せず、行(それは、dataTableの外側で正常に動作します)。 は、ここに私のbackingBeanです:ice:ice内のselectBooleanCheckBox:dataTable

public class PermissionCtrl { 

    //some attributes 
    private UIData datas; 
    private List<Permission> permissions; 


    private UISelectBoolean checkbox ; 

    @EJB 
    private PermissionEjbLocal permissionService; 


    //getters & setters 


    public List<Permission> getSelectedPermissions() { 

    Permission selectedRow = new Permission(); 
    int size = datas.getRowCount(); 

    List<Permission> selectedPermissions = new ArrayList<Permission>(); 
    for (int i = 0; i < size; i++) { 
     datas.setRowIndex(i); 
     System.out.println(i); 
     System.out.println(checkbox.isSelected()); 
     if (checkbox.isSelected()) { 

      selectedRow = (Permission) datas.getRowData(); 
      selectedPermissions.add(selectedRow); 

     } 

    } 
    return selectedPermissions; 
} 

public String removeAction() { 

    List<Permission> selectedPermissions = getSelectedPermissions(); 
    for (Permission p : selectedPermissions) { 

     permissionService.removePermission(p); 
    } 
    this.permissions = permissionService.getAllPermissions(); 

    return null; 
} 
    } 

、これは私がデータを取得するのdataTableです:

<ice:form> 
    <ice:dataTable binding="#{permissionCtrl.datas}" value="#{permissionCtrl.permissions}" var="p"> 
      <ice:column> 
       <f:facet name="header"> 
        <ice:outputText value="select" /> 
       </f:facet> 
       <ice:selectBooleanCheckbox binding="#{permissionCtrl.checkbox}" /> 
      </ice:column> 
      <ice:column> 
       <f:facet name="header"> 
        <ice:outputText value="ID" /> 
       </f:facet> 
       <ice:outputText value="test" /> 
      </ice:column> 
      <ice:column> 
       <f:facet name="header"> 
        <ice:outputText value="Label" /> 
       </f:facet> 
       <ice:outputText value="#{p.label}" /> 

      </ice:column> 

      <ice:column style="width:150px"> 
       <f:facet name="header"> 
        <ice:outputText value="Url" /> 
       </f:facet> 
       <ice:outputText value="#{p.url}" /> 

      </ice:column> 


      <ice:column style="width:300px"> 
       <f:facet name="header"> 
        <ice:outputText value="Description" /> 
       </f:facet> 
       <ice:outputText value="#{p.description}" /> 

      </ice:column> 
     </ice:dataTable> 
    </ice:form> 

誰でも同様の問題に遭遇したのですか?私のコードに誤りはありますか?

答えて

0

あなたが行ったのは同じ変数でバインドしているすべてのオブジェクトです。その結果、最後の選択item.itはすべてのオブジェクトが到着するまで上書きされます。

ソリューションは

は、チェックボックスプロパティにtrueまたはfalseの値を取得します

<ice:selectBooleanCheckbox binding="#{permissionCtrl.checkbox}" value="#{p.selected}"/> 

のような性質を

にisSelectedプット値をなどのPermissionクラス内の1つの永続的なブール型プロパティを作る::ありますバッキングビーンで。

public List<Permission> getSelectedPermissions() { 

    Permission selectedRow = new Permission(); 
    int size = datas.getRowCount(); 

    List<Permission> selectedPermissions = new ArrayList<Permission>(); 
    for (int i = 0; i < size; i++) { 
     datas.setRowIndex(i); 
     selectedRow = (Permission) datas.getRowData(); 
     if (selectedRow.isSelected()) { 
      selectedPermissions.add(selectedRow); 
     } 
    } 
    return selectedPermissions; 
} 
+0

それを取得し、それを私には何をしたかを行ったが、私はまだ許可エンティティの選択属性の値としてfalseを持っています: – boskonovic

+0

実際に私はselectedRow.isSelected()とExceptionフェーズ実行。 – boskonovic

+0

例外はありますか? – Sweety

0

すべてのチェックボックスをバッキングBeanの同じ値にバインドするので、後で空の値が初期設定値を上書きします。

値のリストを保持し、インスタンス変数を使用してアドレスを指定します。

+0

jsfコンポーネントでもうまく動作しますが、なぜアイスフェイスコンポーネントで動作しないのかわかりません。 1つの行だけでは機能しません。つまり、初期設定値を上書きする可能性のある他の値はありません。 – boskonovic

関連する問題