何时使用f:view和f:subview

Nic*_*ick 46 view facelets subview jsf-2

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

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

Bal*_*usC 76

<F:视图>

<f:view>只如果要明确指定有用/覆盖任何可用的属性如locale,encoding,contentType,等还是要附加一些阶段监听器.例如

<f:view locale="#{user.locale}" encoding="UTF-8" contentType="text/html">
Run Code Online (Sandbox Code Playgroud)

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

请注意,将其放在模板中的位置无关紧要.你甚至可以把它放在模板客户端作为直接的孩子<ui:define>.然而,规范的地方是直接的孩子,<html>因此包裹着<h:head><h:body>.这也是它在遗留JSP中实际需要的方式.在Facelets中,它是可选的并且被视为元数据.

也可以看看:


<F:子视图>

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

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

也可以看看:

  • @Rinaldo:[ui:fragment](http://stackoverflow.com/questions/15946985/the-right-way-to-conditional-rendering-of-non-jsf-components/15947948#15947948) (5认同)