0

<tr:table value="#{mybean.tableValue} binding="#{mybean.tableBinding}"> 複数選択を有効にして表示したいものがあります。<tr:selectManyCheckbox>コレクションに List を使用しています。部分的なトリガーで valueChangeListenerから値を選択すると、値はデータベースから取得されます。

返された各行について、いくつかの値が真の場合、この行を<tr:table value="#{mybean.tableValue} binding="#{mybean.tableBinding}">

問題は、 valueChangeEventが実行されたときにバインディング値が更新されないことだと思います。データベースの結果をbinding.setValueに入れます (binding.getRowCount()等しくないことを確認し、mybean.tableValue.size()選択した値が正しくありません)。

バインディングのrowCountがテーブルの値と等しくない理由は何ですか?

アップデート:

<tr:subform id="subform1">
    <tr:panelFormLayout rows="6">
    <tr:selectManyCheckbox id="val1" label="Values"
      layout="horizontal" value="#{mybean.data1Values}" 
      autoSubmit="true" valueChangeListener="#{mybean.valuesChangeListener}">
        <f:selectItems value="#{mybean.list1Values}"/>
    </tr:selectManyCheckbox>                        
   </tr:panelFormLayout>
</tr:subform>
<tr:spacer width="5px"/>
<tr:subform id="subform2">            
    <tr:table rows="0" partialTriggers=":::subform1:val1 " 
      value="#{mybean.data2Values}" var="item" id="tabladatos" width="75%" 
      rowSelection="multiple" rowBandingInterval="1" binding="#{mybena.tableBinding}"
      verticalGridVisible="true" horizontalGridVisible="true">
    <tr:column id="_head1" headerText="Colum1" width="30%">
        <tr:outputText id="_head1_value" value="#{item.value1}"/>
    </tr:column>
    <tr:column id="_head2" headerText="Colum2" width="30%">
        <tr:outputText id="_head2_value" value="#{item.value2}"/>
    </tr:column>                
    </tr:table>        
</tr:subform>

public void valuesChangeListener(ValueChangeEvent event) {
        if (event != null) {
            List<Integer> valores = (List<Integer>) event.getNewValue();
            data2Values.addAll(databaseDAO.search(valores));
            RowKeySet rks = new RowKeySetImpl();
            rks.clear();
            tableBinding.setSelectedRowKeys(rks);
            tableBinding.setValue(data2Values);
            for (int x = 0; x < tableBinding.getRowCount(); x++) {
                dataEntity row = (dataEntity) tableBinding.getRowData(x);
                tableBinding.setRowIndex(x);
                if (row.isTrue()) {
                    Object key = tableBinding.getRowKey();
                    rks.add(key);//tableBinding.getSelectedRowKeys().add(key);
                } else {
                    //do something
                }
            }
            tableBinding.setVar("item");
            tableBinding.setSelectedRowKeys(rks);
            FacesContext context = FacesContext.getCurrentInstance();
            context.renderResponse();
        }

    }    

ありがとう!

4

1 に答える 1

0

解決しました!valueChangeListener を変更しました:

public void valuesChangeListener(ValueChangeEvent event) {
        if (event != null) {
            List<Integer> valores = (List<Integer>) event.getNewValue();
            data2Values.addAll(databaseDAO.search(valores));
            tableBinding.getSelectedRowKeys().clear;
            tableBinding.setValue(data2Values);
            for (int x = 0; x < tableBinding.getRowCount(); x++) {
                dataEntity row = (dataEntity) tableBinding.getRowData(x);
                tableBinding.setRowIndex(x);
                Object key = tableBinding.getRowKey();
                if (row.isTrue()) {                    
                    tableBinding.getSelectedRowKeys().add(key);
                } else {
                    tableBinding.getSelectedRowKeys().remove(key);
                }
            }
            tableBinding.setVar("item");
            FacesContext context = FacesContext.getCurrentInstance();
            context.renderResponse();
        }

    }   
于 2012-08-14T10:42:02.177 に答える