当T是接口时如何使用CellTable <t> </t>

时间:2014-01-20 18:05:05

标签: gwt

在我当前的项目中,我必须通过RPC调用在CellTable中呈现项目。必须动态创建列,并且在编译时列类型是未知的。

从服务器端,我发送以下类的列表以在表中定义一行:

public class TableRowDTO implements IsSerializable {
  private List<IsTableItemDTO> tableItemDTOs;

  public TableRowDTO() {
    tableItemDTOs = new ArrayList<IsTableItemDTO>();
  }

  // getters & setters ...

}

每行包含一个实现IsTableItemDTO的项目,该项目是标记接口:

public interface IsTableItemDTO extends IsSerializable {}

实现类描述了要在单元格中显示的实际控件/信息,如:

public class TableDateTimeDTO extends IsTableItemDTO {
  private Date valueDate;
  // ... other fields not necessary for the table
}

或者:

public class TableCheckBoxDTO extends AbstractTableItemDTO {
  private boolean checked;
  // ... other fields not necessary for the table
}

还有:

TablePasswordDTO extends AbstractTableItemDTO {
  private String valueText;
  // ... other fields not necessary for the table
}

因此,在我收到带有{TableCheckBoxDTO, TableDateTimeDTO, TablePasswordDTO}的List的情况下,我想要做的是使用相应的小部件呈现CellTable。

我见过thisthis,但我没有看到如何将任何示例应用到我的案例中,特别是因为我不能使用像这样的问题因为我手头没有 ContactInfo

谢谢

2 个答案:

答案 0 :(得分:1)

您可以将标记界面IsTableItemDTOinstanceof()和动态广播一起使用,以使用通用Column / Cell
有两种方式:

  1. 创建Composite Cell并添加所有可能的单元格类型,然后根据您的isTableItemDTO所属的特定子类型进行显示。
  2. 创建custom cell并根据标记界面的特定类型呈现输入(复选框,文本)

答案 1 :(得分:0)

我在之前的一个项目中使用过Jet表(https://code.google.com/p/gwt-jet/)。我相信它具有您正在寻找的功能。