2015-10-12 55 views
2

我無法理解如何在GWT中構建列。假設我有一個ArrayListBook s,並且想要在CellTable中列出它們。一個特殊的要求是,每個Book有一個ArrayListPage s,我想根據Page列表構建自己的HTML代碼。GWT:製作一列自定義單元格

tutorial on custom cells解釋瞭如何製作一個輸入String然後返回String的單元格。但是,我想餵它Book,然後得到String(通過在BookArrayList<Page>工作)。爲此,我幾乎複製了單元格的示例代碼,除了我用Book替換String

我不知道如何使用此單元格添加一列到我的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(); 
    } 
}; 

此代碼產生了錯誤

在柱

柱(com.google.gwt.cell.client.Cell)不能被施加到(com.google.gwt.cell.client.Cell )

+0

你嘗試'cellTable.addColumn(pagesColumn);'? –

+0

我沒有機會,因爲我甚至沒有聲明'''pagesColumn'''。我在我的問題中添加了IntelliJ顯示錯誤。 –

+0

你得到的錯誤是什麼? –

回答

0

您需要將單元傳遞給列構造函數。之後,不需要在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(); 
    } 
};