【问题标题】:JSF 2.2 conditionally render HTML5 elements with jsf:rendered attributeJSF 2.2 使用 jsf:rendered 属性有条件地渲染 HTML5 元素
【发布时间】:2014-08-07 05:39:39
【问题描述】:

我想在 JSF 2.2 中使用 HTML5 语法实现一个新页面。

我的问题:如果 jsf:rendered 的计算结果为 false,我如何才能实现特定的 HTML 元素不会被渲染?

示例:

<span class="msnumber" jsf:id="msnumber" jsf:rendered="#{!empty controller.msnumber}">[#{controller.msnumber}]</span>

我需要为此目的使用 h:outputText 吗?如果我可以直接使用 HTML 元素,我将不胜感激。

问候 马克

【问题讨论】:

  • 这绝对可以。你有表格吗?如何更新span 组件?显示所有相关代码。
  • 是的,这绝对可以。我在我的一个 JSF 2.2 项目中尝试过它,它按预期工作(使用 MyFaces 2.2.3 和 Mojarra 2.2.6)。你的 JSF 实现是什么?以及哪个版本?尝试使用最新的。 HTML5 支持相当新,旧版本的 MyFaces 和 Mojarra 中存在错误。

标签: html jsf-2 jsf-2.2


【解决方案1】:

直接在 facelets 中使用 HTML 语法并没有错。如果你想控制它是否被渲染,你最好使用&lt;ui:fragment /&gt;标签,它本身不会渲染任何东西:

<ui:fragment rendered="#{!empty controller.msnumber}">
    <span class="msnumber" id="msnumber">[#{controller.msnumber}]</span>
</ui:fragment>

只会渲染

<span class="msnumber" id="msnumber">xx</span>

如果#{!empty controller.msnumber} 评估为true

关于您想要实现它的方式,我不确定是否将 JSF 组件特定属性直接添加到 HTML 标记(尽管可能the other way)。老实说,我从未见过。

【讨论】:

  • JSF 在 2.2 版中引入了传递属性和元素来执行此操作。详情见我的博文:wp.me/p106Ko-bj
【解决方案2】:

您使用span 作为传递元素的方法绝对可以。我在我的一个 JSF 2.2 项目中尝试过它,它可以与 MyFaces 2.2.3 和 Mojarra 2.2.6 一起使用。

您使用 MyFaces 还是 Mojarra?哪个版本?尝试使用最新的。 HTML5 支持是相当新的,旧版本的 MyFaces 和 Mojarra 中存在错误。

另一种可能是,您的 EL 表达式 #{!empty controller.msnumber} 有问题。

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 2012-08-31
    • 1970-01-01
    • 2014-07-18
    • 2018-01-24
    • 2011-09-09
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多