“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 确实 notrendered 列为有效属性。

无论如何,我尝试使用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:fragmentui:component 中的有效属性。见JSF 2.2 View Declaration Language。

某些 IDE 不建议在自动完成(内容助手)模式下使用此属性,并将其验证为“未知属性”。发生这种情况是因为 JSF 2.0 中的标记文件声明中缺少 rendered 属性(即使 UIComponent 中提供了该属性),并且 IDE 验证基于标记文件声明。 JSF 2.1 中修复了问题:将缺少的属性添加到标记文件声明中。 IDE 中的验证并不总是反映这种变化。

【讨论】:

@Kukeltje rendered 属性在 JSF 2.0 的标记文件声明中缺失,但在 UIComponent 中显示。 IDE 验证基于标记文件声明,它会给出误导性的验证警告/错误。此问题已在 JSF 2.1 中修复,缺少的属性已添加到标记文件声明中。

以上是关于“ui:fragment”中的“rendered”属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 下载 _rendered_ 网页?

资源 'data.template_file.user_data' 没有属性 'rendered'

我应该使用带有 render 属性的 ui:fragment 来有条件地在带有 JSF 2.2 的 Facelets 中呈现 HTML 标记吗?

flask 信号

由于 Meteor 升级到 0.8.0,当 Session 变量依赖发生变化时,不会触发模板“rendered”回调

删除列表适配器中的重复项