【问题标题】:GWT CellTable Set Column to HTMLGWT CellTable 将列设置为 HTML
【发布时间】:2012-05-31 18:57:52
【问题描述】:
我想将 FlexTable 放入 CellTable,因此在我的 String getValue() 中我创建了 FlexTable 并返回 ft.toString(),其中 ft 是我的 FlexTable。
但是,当我执行 table.addColumn(flex_table_string, "Header") 时,GWT 不会呈现 HTML,而是将其保留为文本
请帮忙,
谢谢,
垫子
【问题讨论】:
标签:
html
gwt
celltable
flextable
【解决方案1】:
您应该构建一个Cell,它使用SafeHtmlBuilder 构建HTML 表,而不是构建一个小部件并获取其HTML 表示(顺便说一句,您甚至不应该使用toString() 来执行此操作,而是创建,比如说SimplePanel,将小部件放入其中,然后在父面板上调用getElement().getInnerHTML()。
主要有两个原因:
-
SafeHtmlBuilder 会更快(这就是 CellTable 与 Grid 或 FlexTable 的重点)
- 您超出预期:序列化小部件将丢失所有事件处理。
话虽如此,您所要求的确实是可能的:使用使用SafeHtmlBuilder 的appendHtmlConstant 方法的Cell。要么制作一个,要么与 Alex 建议的 escape/unescape 往返不同,使用 TextCell,但使用使用 SafeHtmlUtils.fromTrustedString 的自定义 SafeHtmlRenderer(为简单起见扩展 AbstractSafehtmlRenderer)构造它。
【解决方案2】:
您需要将所有< 和> 替换为。
protected void render(Context context, SafeHtml value, SafeHtmlBuilder sb) {
String html = value.asString().replaceAll("<", "<").replaceAll(">", ">");
sb.appendHtmlConstant(html);
}