【问题标题】:ui:fragment rendered attribute not working after upgrading Facelets to JSF 2将 Facelets 升级到 JSF 2 后,ui:fragment 渲染属性不起作用
【发布时间】:2011-12-08 04:57:49
【问题描述】:

我正在将一个项目从 JSF1.2/Facelets1.1 升级到带有内置 facelets 的 JSF2.1。以下不再有效,我不知道为什么。两个 ui:fragments 显然都评估为 true,并且呈现链接版本和纯文本版本:

<ui:fragment rendered="#{rootcauseid ne rc.id}">
    <a href="#{request.contextPath}/viewrootcause.jsf?rootcausenum=#{rc.id}">Root Cause #{rcRowCounter + 1}</a>
</ui:fragment>
<ui:fragment rendered="#{rootcauseid eq rc.id}">
    <h:outputText value="Root Cause #{rcRowCounter + 1}"/>
</ui:fragment>

以下确实有效,所以我有一个有效的解决方法。

<h:panelGroup rendered="#{rootcauseid ne rc.id}">
    <a href="#{request.contextPath}/viewrootcause.jsf?rootcausenum=#{rc.id}">Root Cause #{rcRowCounter + 1}</a>
</h:panelGroup>
<h:outputText value="Root Cause #{rcRowCounter + 1}"
    rendered="#{rootcauseid eq rc.id}"/>

但是为什么 ui:fragment 版本不起作用? Facelets 和 JSF 发生了什么变化? “ui:fragment rendering='...'” 不再是有效的习语吗?

【问题讨论】:

  • 据我所知,它应该可以正常工作。尝试调试渲染的计算。如何为 ui 前缀声明命名空间?
  • UI前缀定义为:xmlns:ui="java.sun.com/jsf/facelets"

标签: jsf jsf-2 facelets fragment


【解决方案1】:

根据规范,ui:fragment只有id和binding属性。

【讨论】:

  • 这不是真的。这是一个记录错误。它一直存在于 Facelets 中,但自 JSF 2.1 起仅在标签文档中得到修复。另请参阅stackoverflow.com/questions/3713468/… 具体问题是由 JSF 2.1 中 &lt;ui:fragment&gt; 标记的生命周期的变化引起的,而不是 Facelets 1.x 和 2.0。
  • BalusC,很好的信息。如果您有更多关于 中生命周期变化的信息并将其作为答案发布,我将很乐意“接受”该回复。
猜你喜欢
  • 2012-01-31
  • 2011-08-26
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2022-09-29
  • 2011-09-09
相关资源
最近更新 更多