使用UiBinder的动态文本

时间:2013-06-05 16:07:24

标签: gwt uibinder

我需要为以下(简化)案例准备UiBinder模板:

<div class="recipient">
    <strong>Recipient: </strong> Will Smith
</div>

当然名字和名字都是动态的。

我在UiBinder xml中得到了这个结果:

<g:HTMLPanel addStyleNames="recipient">
    <strong>Recipient: </strong> <span ui:field='recipient'/>
</g:HTMLPanel>

如您所见,生成的html将包含额外的span元素。我想要实现完全相同的HTML。是否有任何(简单)方式/ UI组件可以做到这一点?任何帮助表示赞赏。

编辑。我不想从UiBinder中提取<strong>Recipient: </strong>(我们可以想象一个在动态文本之前和之后有更多html标记的情况,我看起来很自然它必须是(某些)UiBinder模板的一部分)

1 个答案:

答案 0 :(得分:4)

您不会有其他选择,只能发出整个<strong>Recipent: </strong> Will Smith字符串,为此,SafeHtmlTemplates可以提供帮助(或Messages如果您希望以HTML为代价进行国际化< EM>安全)。

让我们为HTML使用<div class="recipient">小部件(如果可以,请使用简单的<div>):

<g:HTML styleName="recipient" ui:field="recipient" />

然后在您的Java代码中:

interface Templates extends SafeHtmlTemplates {
  @Template("<strong>Recipient: </strong> {0}")
  SafeHtml recipient(String recipient);
}

static final Templates TEMPLATES = GWT.create(Templates.class);

(如果您有HTML而不是文本,请使用SafeHtml作为参数)

recipient.setHTML(TEMPLATES.recipent("Will Smith"));

话虽如此,让我质疑您的初步目标:您为什么要删除span