GWT:将原始HTML放在Label中

有没有办法将原始HTML放在带有GWT的Label小部件中? 构造函数和setText()方法自动转义HTML的文本(因此<显示为<等)。

我需要的是:

 String matched = "two"; List values = Arrays.asList("one", "two", "three"); StringBuilder sb = new StringBuilder(); for (String v : values){ if (v.equals(matched)){ sb.append("" + v + ""); } else { sb.append(v); } sb.append(", "); } Label label = new Label(); label.setRawText(sb.toString()); //div contains the following HTML: "one, two, three, " 

我想输出一个逗号分隔的字符串列表,但我希望其中一个字符串加粗。 谢谢。

使用HTML类(或者更可能是:InlineHTML类而不是Label类.InlineHTML的工作方式与标签类似,只是你可以给它html。

并且只是一个安全警告:如果用户输入了InlineHTML对象的部分输入,请记住将html从该部分中删除,这样用户就无法将自己的脚本插入到代码中。

对不起,我要回答我自己的问题,因为我找到了我要找的东西。

SafeHtmlBuilder类非常适合这种情况。 你告诉它你要逃脱的字符串以及你不想逃避的字符串。 它像StringBuilder一样工作,因为你调用了append方法:

 String matched = "two"; List values = Arrays.asList("one", "two", "three "); SafeHtmlBuilder builder = new SafeHtmlBuilder(); for (String v : values){ if (v.equals(matched)){ builder.appendHtmlConstant(""); builder.appendEscaped(v); builder.appendHtmlConstant(""); } else { builder.appendEscaped(v); } builder.appendEscaped(", "); } HTML widget = new HTML(); widget.setHTML(builder.toSafeHtml()); //div contains the following HTML: "one, two, three <escape-me>, " 

请注意, appendHtmlConstant方法需要一个完整的标记。 因此,如果要向运行时值更改的标记添加属性,则无法使用。 例如,这不起作用(它抛出IllegalArgumentException ):

 String url = //... SafeHtmlBuilder builder = new SafeHtmlBuilder(); builder.appendHtmlConstant("link"); 

创建标签并将其设置为粗体:

 Label label = new Label("text"); label.getElement().getStyle().setFontWeight(FontWeight.BOLD); 

或者您可以创建SpanElement并设置其innerHtml。

这是在窗口小部件中放置空格的示例,例如Label:

 public void setTextNbsp( final Widget w ) { w.getElement().setInnerHTML( " " ); } 

也可以使用其他HTML实体。 注意这一点不要打开安全漏洞。 如果做一些更动态的事情,可能需要考虑SafeHtml等。

我认为你应该使用SpanElement,你不希望转义html,然后将你想要的标签转义并将它们放在垂直面板上,这样它们就会显示为单行文本。