【问题标题】:GWT Generate dynamic CellTableGWT 生成动态 CellTable
【发布时间】:2011-07-20 09:12:18
【问题描述】:

我想从 xml 生成动态单元格表​​

我的 xml 包含 N 列(详细信息如 - 列名称、列类型、可排序、可编辑(Y/N)、单元格的值等,

问题是如何从变体(动态)xml 在 GWT 中生成单元表 即在创建单元格表时,我们不知道存在多少列,我们不知道类型、isEditable、isSortable 等。

我可以解析xml。现在我想生成动态表 我创建了用于 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如下:

< 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 生成 Celltable。在上面的 xml 示例中包含 col 名称、数据类型等和值。

如何基于xml生成动态getter和setter并在celltable中用于显示/更新值

【问题讨论】:

    标签: xml gwt javabeans gwt-2.2-celltable


    【解决方案1】:

    解析 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多