“ui:fragment”中的“rendered”属性
Posted
技术标签:
【中文标题】“ui:fragment”中的“rendered”属性【英文标题】:"rendered" attribute in "ui:fragment" 【发布时间】:2017-09-26 17:11:07 【问题描述】:我想使用ui:fragment
中的rendered
属性在我的JSF 2.2 facelet 中有条件地呈现span
元素。 JSF 2.2 documentation of ui:fragment 将 rendered
列为允许的属性。但是,我使用 MyFaces 2.2.12 作为 JSF 实现,而 MyFaces 2.2 documentation of ui:fragment 确实 not 将 rendered
列为有效属性。
无论如何,我尝试使用rendered
,它确实有效。但是,我的 IDE - IntelliJ - 正确地将 rendered
属性突出显示为错误,并告诉我在 ui:fragment
元素中不允许这样做。
我在 ui:fragment rendered attribute not working after upgrading Facelets to JSF 2 中看到了一个文档错误,其中 rendered
falsly 没有在 JSF 2.0 文档中列出,但该响应没有说明 JSF 2.2 或 MyFaces 2.2(可能是因为它的日期早于JSF 2.2 的发布)。
MyFaces 文档中缺少的rendered
属性也只是一个错误吗?
由于ui:fragment
元素在单个Facelets 文件中多次出现,这些“错误”错误使得查找真正错误变得非常麻烦。如果确实只是文档中的一个错误,那么针对此问题的推荐解决方案是什么?
【问题讨论】:
自从我开始使用 JSF 2(现在是 5 年前)以来,我一直面临这种情况。该属性绝对有效,但 IDE 不考虑它(Intellij 或 Eclipse 也不考虑)。似乎是由 IDE 解析器移植到 2.1 和 2.2 的文档错误。该属性肯定存在于 2.1 文档中:***.com/questions/3713468/… MyFaces 中不知道。 @XtremeBiker 感谢您的评论。好的,那我就继续使用rendered
属性。我有点担心这个文档错误在 Mojarra 文档中得到了修复(从 2.1 版开始?),但在 MyFaces 2.2 文档中没有。
2013 年 3 月的 JSF 2.2 规范中的勘误表中有一行关于此问题。链接是 download.oracle.com/otndocs/jcp/jsf-2_2-fr-eval-spec/index.html,它位于 pdf 文档 (C114) 的第 406 页中:Add "rendered" attribute to VDL docs for ui:component and ui:fragment.
.所以 MyFaces 似乎也没有正确更新这部分。
【参考方案1】:
rendered
是 JSF 2.0、2.1、2.2 中 ui:fragment
和 ui:component
中的有效属性。见JSF 2.2 View Declaration Language。
某些 IDE 不建议在自动完成(内容助手)模式下使用此属性,并将其验证为“未知属性”。发生这种情况是因为 JSF 2.0 中的标记文件声明中缺少 rendered
属性(即使 UIComponent 中提供了该属性),并且 IDE 验证基于标记文件声明。 JSF 2.1 中修复了问题:将缺少的属性添加到标记文件声明中。 IDE 中的验证并不总是反映这种变化。
【讨论】:
@Kukeltjerendered
属性在 JSF 2.0 的标记文件声明中缺失,但在 UIComponent 中显示。 IDE 验证基于标记文件声明,它会给出误导性的验证警告/错误。此问题已在 JSF 2.1 中修复,缺少的属性已添加到标记文件声明中。以上是关于“ui:fragment”中的“rendered”属性的主要内容,如果未能解决你的问题,请参考以下文章
资源 'data.template_file.user_data' 没有属性 'rendered'
我应该使用带有 render 属性的 ui:fragment 来有条件地在带有 JSF 2.2 的 Facelets 中呈现 HTML 标记吗?