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,然后将你想要的标签转义并将它们放在垂直面板上,这样它们就会显示为单行文本。