2011-07-20 94 views
0

我想從XML生成動態細胞表GWT生成動態CellTable

我的XML包含列數爲n(帶等的細節 - columnn名,列類型,排序,isEditable(Y/N),對於一個值細胞等

問題是如何生成單元格表GWT從變體(動態)xml 即創建單元格表時,我們不知道有多少列存在,我們不知道那裏的類型, isEditable,isSortable等

我可以解析xml。現在我想生成動態表 我創建d用於getter和setter的BeanInfo類。 如何爲這些動態列(Bean的屬性)創建動態getter和setter以及如何設置bean中的值?

僞代碼:

// dynamic column. 
    final Column<BeanInfo, String> dynamicGwtColumn = new Column<BeanInfo, String>(
      new DynamicDataTypeCell()) { 
     @Override 
     public String getValue(BeanInfo object) { 
      return object.getDyncamicCellValue(); 
     } 
    }; 
    dynamicGwtColumn .setSortable(true); 
    sortHandler.setComparator(dynamicGwtColumn , 
      new Comparator<BeanInfo >() { 
       public int compare(BeanInfo o1, BeanInfo o2) { 
        return o1..getDyncamicCellValue().compareTo(o2.getDyncamicCellValue()); 
       } 
      }); 
    cellTable.addColumn(dynamicGwtColumn , "Record ID"); 


    dynamicGwtColumn 
      .setFieldUpdater(new FieldUpdater<BeanInfo, String>() { 
       public void update(int index, BeanInfo object, 
         String value) { 
        // Called when the user changes the value. 

        object.setDyncamicCellValue(value); 

        dataProvider.refresh(); 
       } 
      }); 

我的XML如下:?

< XML版本= 「1.0」 編碼= 「UTF-8」>

<數據neutralizedCatalog =」存儲庫「>

< MetaData> 

    < RecordAttribute name="ID" displayname="ID" columnname="CID" datatype="VARCHAR2" sortable="true" accessmode="modify" showmvpd="false" length="255" integerlength="0" fractionallength="0" /> 
    < RecordAttribute name="Name" displayname="Name" columnname="CNAME" datatype="VARCHAR2" sortable="true" accessmode="modify" showmvpd="false" length="255" integerlength="0" fractionallength="0" /> 
    < RecordAttribute name="custom1" displayname="custom1" columnname="CCUSTOM1" datatype="VARCHAR2" sortable="true" accessmode="modify" showmvpd="false" length="256" integerlength="0" fractionallength="0" /> 
</MetaData> 
    <Records> 
    < RecordAttribute name="CID" edited="false"> 
     <Value /> 
     </RecordAttribute> 
     < RecordAttribute name="CNAME" edited="false"> 
     <Value /> 
     </RecordAttribute> 
     < RecordAttribute name="CCUSTOM1" edited="false"> 
     <Value /> 
     </RecordAttribute> 
    </Record><Records> 
<Recordid="17" name="17" productkeyid="13012" selected="false" accessmode="modify" isedited="false"> 
     <RecordAttribute name="CID" edited="false"> 
     <Value>17</Value> 
     <OldValue>17</OldValue> 
     </RecordAttribute> 
     <RecordAttribute name="CNAME" edited="false"> 
     <Value>17</Value> 
     <OldValue>17</OldValue> 
     </RecordAttribute> 
     <RecordAttribute name="CCUSTOM1" edited="false"> 
     <Value>17</Value> 
     <OldValue>17</OldValue> 
     </RecordAttribute> 
    </Record> 

從上面的XML我想生成Cellta BLE。在上面的xml示例中包含col名稱,數據類型等和值。

如何生成動態getter和基於XML和在celltable用於顯示/更新值

回答

0

解析XML設定器。將數據獲取到列信息對象的ArrayList中(例如)。

columns.get(0).type - type of column 1 

columns.get(0).name - name of column 1 

對於每一列,根據類型和參數,添加列cellTable

CellTable<BeanInfo> cellTable = new CellTable<BeanInfo >(); 

for(AxCol col : columns)) { 

    Column<BeanInfo, java.lang.Object> cellTableColumn = null; 
    AbstractCell cellTableCell = null; 

    if(col.type == "string"){ 

     cellTableCell = new TextCell(); 

     cellTableColumn = new Column<BeanInfo, java.lang.Object>(cellTableCell) { 
      @Override 
      public String getValue(BeanInfo object) { 
      return (BeanInfo) object.getValue(); 
      } 
     };        

    } 

    if(col.type == "image"){ 

     cellTableCell = new ImageCell(); 

     cellTableColumn = new Column<BeanInfo, java.lang.Object>(cellTableCell) { 
      @Override 
      public String getValue(BeanInfo object) { 
      return (BeanInfo) object.getValueForImage(); 
      } 
     };        

    } 

    cellTable.addColumn(cellTableColumn); 
}