何时使用 f:view 和 f:subview

Posted

技术标签:

【中文标题】何时使用 f:view 和 f:subview【英文标题】:When to use f:view and f:subview 【发布时间】:2012-02-11 14:22:15 【问题描述】:

我不确定使用<f:view><f:subview> 有什么好处。 我注意到可以编写 JSF 页面而不使用它们。

使用这些标签有什么好处?

【问题讨论】:

【参考方案1】:

<f:view> 仅在您想要显式指定/覆盖任何可用属性(例如 localeencodingcontentType 等)或想要附加一些阶段侦听器时才有用。例如

<f:view locale="#user.locale" encoding="UTF-8" contentType="text/html">

如果您不指定它,那么将只使用合理的 JSF 默认值,分别是 UIViewRoot#getLocale()UTF-8 和最接近的匹配 Accept 请求标头。应该注意的是,Accept 请求标头的最接近匹配并不总是完全正确的。有时它会导致application/xhtml+xml,因为在Facelets 的情况下,URL 中存在.xhtml 扩展名,并且网络浏览器未配置为默认将其解释为text/html(如MSIE)。您真的很想通过将其显式设置为 text/html 来避免这种错误的内容类型。

请注意,将其放在模板中的哪个位置并不重要。您甚至可以将其作为&lt;ui:define&gt; 的直接子级放在模板客户端中。但是,规范位置是&lt;html&gt; 的直接子级,因此包装了&lt;h:head&gt;&lt;h:body&gt;。这也是它在实际需要的遗留 JSP 中的完成方式。在 Facelets 中,它是可选的,并被视为元数据。

另见:

Our XHTML wiki page Is it possible to use JSF+Facelets with HTML 4/5? JSF 2.0 not rendering any page

&lt;f:subview&gt; 将创建另一个命名容器上下文。当您想在同一视图根中重复使用包含固定组件 ID 的包含文件时,这特别有用,否则您将收到重复的组件 ID 错误。但是,从 JSF 2.0 开始,这样的包含文件最好是一个复合组件,它本身已经是一个命名容器。

如果你不指定它,那么如果你不在视图中多次物理地重用具有相同 ID 的组件,它不会造成伤害。

另见:

Why <h:panelGroup> id is not found when I access through <f:subview> tag? Binding attribute causes duplicate component ID found in the view Difference between <f:subview> and <ui:composition> tags

【讨论】:

如果我需要有条件地渲染 HTML(比如表格行),子视图是一个不错的选择吗?我似乎找不到另一个具有不呈现 HTML 标记的渲染属性的组件。 @Rinaldo: ui:fragment

以上是关于何时使用 f:view 和 f:subview的主要内容,如果未能解决你的问题,请参考以下文章

f:view 与许多已定义的资源库合同的行为如何?

jsf中的spring acl

何时使用字节数组和何时使用字节缓冲区?

useMemo和useCallback:何时使用它们,何时不使用它们

useMemo和useCallback:何时使用它们,何时不使用它们

useMemo和useCallback:何时使用它们,何时不使用它们