何时使用f:view和f:subview

时间:2012-01-16 17:00:25

标签: jsf-2 view facelets subview

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

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

1 个答案:

答案 0 :(得分:70)

&LT; F:视图&gt;

<f:view>仅在您明确指定/覆盖任何可用属性时才有用,例如localeencodingcontentType等,或者想要附加一些阶段听众。 E.g。

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

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

请注意,将其放在模板中的位置并不重要。您甚至可以将其作为<ui:define>的直接子项放在模板客户端中。但是,规范地点是<html>的直接子项,因此包裹<h:head><h:body>。这也是在遗留JSP中实现所需的方式。在Facelets中,它是可选的,并被视为元数据。

另见:


&LT; F:子视图&GT;

<f:subview>将创建另一个命名容器上下文。当您想要在同一视图根中重复使用包含多个固定组件ID的包含文件时,这尤其有用,否则您将获得重复的组件ID错误。但是,由于JSF 2.0这样的包含文件可以更好地成为一个复合组件,它本身已经是一个命名容器。

如果您没有指定它,那么如果您未在视图中多次重复使用具有相同ID的组件,则不会造成损害。

另见: