有没有办法将原始HTML放入LabelGWT 的小部件中?构造函数和setText()方法自动转义HTML的文本(因此<显示为<等).
我需要的是:
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从该部分中删除,这样用户就无法将自己的脚本插入到代码中.
对不起,我要回答我自己的问题,因为我找到了我想要的东西.
这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 <escape-me>, "
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)