我怎样才能使 h:outputText 粗体中的值的一部分?

How can i make part of a value in a h:outputText Bold?

如何将值的一部分设为 h:outputText 粗体? 我想要粗体的名称:

<h:outputText value="Normal Text: #{Controller.Object.name}" />

我试过了:<h:outputText value="Normal Text: <b>#{Controller.Object.name}</b>" />

收到此错误:“与元素类型 "h:outputText" 关联的属性 "value" 的值不能包含 '<' 字符。” 在此处和其他页面进行一些搜索后,发现属性 escape="false" 可以解决此问题...但对我来说没有区别,

<h:outputText escape="false" value="Normal Text: <b>#{Controller.Object.name}</b>" />

仍然出现同样的错误。

有人遇到过这个问题吗?

你真的需要<h:outputText>吗?

在 Facelets 中,您可以只在模板文本中使用 EL:

Normal Text: <b>#{Controller.Object.name}</b>

如果你真的坚持使用<h:outputText>,那么你确实应该手动转义XML实体并用escape="false"显示它:

<h:outputText value="Normal Text: &lt;b&gt;#{Controller.Object.name}&lt;/b&gt;" escape="false" />

这不仅读起来更丑陋,而且在 #{Controller.Object.name} 是客户端控制的值的情况下还会打开 XSS 攻击漏洞。

另请参阅:

  • Is it suggested to use h:outputText for everything?
  • CSRF, XSS and SQL Injection attack prevention in JSF

对我来说,将 <p></p> 放在 .properties 文件的文本中或任何定义 Controller.Object.name 值的地方更有意义。更干净,您不必弄乱编码符号。