2012-08-13 85 views
0

我有一個<tr:table value="#{mybean.tableValue} binding="#{mybean.tableBinding}">,我想顯示選擇多個啓用。 我使用列表作爲集合,當我從<tr:selectManyCheckbox> valueChangeListener中選擇具有部分觸發器的值時,將從數據庫獲取值。選擇初始行CoreTable

返回的每個行,如果某個值是真的,我希望此行標誌着作爲<tr:table value="#{mybean.tableValue} binding="#{mybean.tableBinding}">

選擇我認爲這個問題是我的綁定值不是valueChangeEvent運行inspite我時更新把binding.setValue數據庫的結果(我檢查了binding.getRowCount()不超過mybean.tableValue.size()相等),然後選擇的值是不正確的)

任何想法,爲什麼綁定rowCount時不表的值相等?

UPDATE:

<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(); 
     } 

    }  

謝謝!

回答

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(); 
     } 

    }