有没有办法将原始HTML放在带有GWT的Label
小部件中?构造函数和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, "
我想输出以逗号分隔的字符串列表,但我希望其中一个字符串加粗。感谢。
答案 0 :(得分:11)
使用HTML类(或者更可能是:InlineHTML类而不是Label类.InlineHTML的工作方式与标签类似,但您可以将其赋予html。
只是一个安全警告:如果用户输入了InlineHTML对象的部分输入,请记住将html从该部分中删除,这样用户就无法将自己的脚本插入到代码中。
答案 1 :(得分: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 <escape-me>, "
请注意,appendHtmlConstant
方法需要完整标记。因此,如果要向运行时值更改的标记添加属性,则无法使用。例如,不会工作(它会抛出IllegalArgumentException
):
String url = //...
SafeHtmlBuilder builder = new SafeHtmlBuilder();
builder.appendHtmlConstant("<a href=\""); //throws IllegalArgumentException
builder.appendEscaped(url);
builder.appendHtmlConstant("\">link</a>");
答案 2 :(得分:3)
创建标签并将其设置为粗体:
Label label = new Label("text");
label.getElement().getStyle().setFontWeight(FontWeight.BOLD);
或者您可以创建SpanElement
并设置其innerHtml。
答案 3 :(得分:2)
以下是在窗口小部件中放置空格的示例,例如标签:
public void setTextNbsp( final Widget w ) {
w.getElement().setInnerHTML( " " );
}
也可以使用其他HTML实体。注意这一点不要打开安全漏洞。如果做一些更动态的事情,可能需要考虑SafeHtml等。
答案 4 :(得分:0)
我认为你应该使用SpanElement,你不希望html被转义并标记你想要的地方然后被转义并将它们放在垂直面板上,这样它们就会显示为单行文本。