GWT:将原始HTML放在Label中

Mic*_*ael 11 java gwt

有没有办法将原始HTML放入LabelGWT 的小部件中?构造函数和setText()方法自动转义HTML的文本(因此<显示为&lt;等).

我需要的是:

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

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

MTi*_*ted 11

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

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

  • 标签↔HTML,InlineLabel↔InlineHTML.前者是`div`s,latters`spor`s. (4认同)

Mic*_*ael 6

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

SafeHtmlBuilder堂课非常适合这个.你告诉它你要逃脱的字符串以及你不想逃脱的字符串.它的工作原理就像StringBuilder你调用append方法一样:

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

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

String url = //...
SafeHtmlBuilder builder = new SafeHtmlBuilder();
builder.appendHtmlConstant("<a href=\""); //throws IllegalArgumentException
builder.appendEscaped(url);
builder.appendHtmlConstant("\">link</a>");
Run Code Online (Sandbox Code Playgroud)