【问题标题】:GWT: Making a column of custom cellsGWT:制作一列自定义单元格
【发布时间】:2015-10-12 10:55:51
【问题描述】:

我无法理解如何在 GWT 中构建列。假设我有一个ArrayList 或Books,并希望将它们列在CellTable 中。一个特殊要求是每个Book 有一个ArrayList 的Pages,我想基于Page 列表构建自己的HTML 代码。

tutorial on custom cells 解释了如何创建一个输入 String 然后返回 String 的单元格。但是,我想给它一个Book,然后得到一个String(通过处理Book 的ArrayList<Page>)。为此,我几乎复制了单元格的示例代码,只是将String 替换为Book。

我不知道如何使用此单元格向我的CellTable 添加一列。使用TextColumn 将获取单元格的render 方法生成的HTML 代码并将其转义。我的最后一次尝试是构建一个Column<PagesCell, String>,但Column 的构造函数想要一个实现Cell<String> 的对象,而我的实现Cell<Book>。我究竟做错了什么?很可能,我对单元格和列在 GWT 中的工作方式有一些基本的误解。下面,您可以看到我想到的代码,但它不起作用。

Cell<Book> pagesCell = new PagesCell();
Column<Book, String> pagesColumn = new Column<Book, String>(pagesCell) {
    @Override
    public String getValue(Book book) {
        PagesCell pagesCell = new PagesCell();
        SafeHtmlBuilder safeHtmlBuilder = new SafeHtmlBuilder();
        pagesCell.render(null, book, safeHtmlBuilder);
        return safeHtmlBuilder.toSafeHtml().asString();
    }
};

此代码产生错误

Column中的Column (com.google.gwt.cell.client.Cell)不能应用到(com.google.gwt.cell.client.Cell)

【问题讨论】:

  • 你试过cellTable.addColumn(pagesColumn); 吗?
  • 我没有机会,因为我什至没有声明pagesColumn。我在我的问题中添加了 IntelliJ 显示的错误。
  • 您遇到的错误是什么?

标签: java gwt


【解决方案1】:

您需要将一个单元格传递给列构造函数。之后,就不需要在 getValue() 方法中初始化另一个单元格对象了。

您需要通过扩展SafeHtmlCell 创建一个新的Cell,并传递一个代表您要呈现的HTML 的字符串。然后在您的专栏中:

Column<Book, SafeHtml> pagesColumn = new Column<Book, SafeHtml>(new PagesCell()) {
    @Override
    public SafeHtml getValue(Book book) {
        SafeHtmlBuilder safeHtmlBuilder = new SafeHtmlBuilder();
        // create your HTML here - not in the cell, using your Book object
        return safeHtmlBuilder.toSafeHtml();
    }
};

【讨论】:

    猜你喜欢
    • 2013-01-13
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多