2012-08-13 6 views
0

나는 복수 선택이 가능하도록 표시하고자하는 <tr:table value="#{mybean.tableValue} binding="#{mybean.tableBinding}">을 가지고 있습니다. 컬렉션에 List를 사용하고 있습니다. 부분 트리거가있는 <tr:selectManyCheckbox> valueChangeListener에서 값을 선택하면 값이 데이터베이스에서 가져옵니다. 각 행에 대해초기 행 선택 CoreTable

어떤 값이 true이면 나는 문제가 내 바인딩 값이 난 Ɒ이 때 valueChangeEvent 실행을 업데이트되지 않는 것입니다 생각 <tr:table value="#{mybean.tableValue} binding="#{mybean.tableBinding}">

선택으로, 내가 표시이 행을 원 반환 데이터베이스 binding.setValue 결과 넣어 결합 rowCount의 테이블의 동일한 값이 아닌 이유 선택된 값)

짐작 올바르지 않은 후 (전 binding.getRowCount() 같지 mybean.tableValue.size()보다 것을 확인)?

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

    }