2016-12-14 12 views
0

私は、編集可能なVaadinテーブルにチェックボックスの列があります。チェックボックスのテーブルの列をデータベースにバインドする方法は?

アイテムの状態がgetISACTIVE = 1(ロングタイプ、データベースから取得)の場合、チェックボックスをオンにします。

一方、チェックボックスの値を変更すると、ISACTIVEの条件を変更したい(setISACTIVE=1がチェックされ、setISACTIVE=0がチェックされていません)。

は今まで、私はチェックボックスが、まだチェックボックスが条件= 1

任意のアイデアは、私が何をすべきにもかかわらず、チェックされません地図しようとしましたか?

table.addGeneratedColumn("Is Active", new Table.ColumnGenerator() { 

       private static final long serialVersionUID = 1L; 
       @Override 
       public Object generateCell(final Table source, final Object itemId, 
         Object columnId) { 

        final CheckBox checkBox = new CheckBox(""); 

    //ITERATE THROUGH DATABASE, THEN getPS_SECTION that is the ID Bean Property 

          for (int i = 0; i < list.size(); i++) { 
           PS_SECTION section = list.get(i); 
           Long sc = section.getPS_SECTION(); 

           FillIt(sc,checkBox); 

            if (section.getISACTIVE() == 1L) {        
             value = true; 
             CheckIt(sc,value); 
            } 
            else if(section.getISACTIVE() == 0L){ 
             value = false; 
             CheckIt(sc,value); 
            } 
          } 

        checkBox.addValueChangeListener(new ValueChangeListener() {     
         @Override 
         public void valueChange(ValueChangeEvent event) { 

          Boolean isTrue = checkBox.getValue(); 
          if (isTrue){ 
           isChecked = true; 
           Notification.show("Is activated"); 

           //setISACTIVE = 1 
          } 
          else{    
           isChecked = false; 
           Notification.show("Is deactivated"); 

           //setISACTIVE = 0 
          }       
         } 
        });    
        return checkBox;     
       }    
      }); 

      table.setTableFieldFactory(new DefaultFieldFactory() { 

       public Field<?> createField(Container container, final Object itemId, Object propertyId, Component uiContext) { 

           if (CHECKBOX_COLUMN.equals(propertyId)) { 
            CheckBox field1 = new CheckBox(); 
            field1.setImmediate(true); 
           } 
        return super.createField(container, itemId, propertyId, uiContext); 
       } 
      }); 

そしてここでメソッドFillIt()CheckIt()

private void CheckIt(Long id, Boolean value) { 
     CheckBox checkBox = itemIdToCheckbox.get(id); 
     checkBox.setValue(value); 
    } 

    private void FillIt(Long id, CheckBox checkBox) { 
     itemIdToCheckbox.put(id,checkBox);  
    } 

//When itemIdToCheckBox is 

protected Map<Long, CheckBox> itemIdToCheckbox = new LinkedHashMap<Long, CheckBox>(); 
+0

代わりにvaadinsグリッドコンポーネントを使用することは可能でしょうか? 'BeanItemContainer'との組み合わせでは、チェックボックスを使ったユースケースは簡単です。 – JDC

+0

@JDC残念ながら、私たちが使用しているvaadinのバージョンはグリッドをサポートしていないので、これは不可能です。ありがとう、結構です! – natso

答えて

0
private void CheckIt(Long id, Boolean value) { 
     CheckBox checkBox = itemIdToCheckbox.get(id); 
     checkBox.setValue(value); 
    } 

この "itemIdToCheckbox.get(ID)が" 何をしますか?

+0

プロテクトマップ itemIdToCheckbox =新しいLinkedHashMap ();チェックボックスのマップ – natso

関連する問題