我不确定使用 <f:view>
和 <f:subview>
的好处是什么。
我注意到可以不使用它们编写JSF页面。
使用这些标签有哪些好处?
<f:view>
仅在您想要明确指定/覆盖任何可用属性(如locale
,encoding
,contentType
等)或想要附加一些阶段侦听器时才有用。例如:
<f:view locale="#{user.locale}" encoding="UTF-8" contentType="text/html">
UIViewRoot#getLocale()
、UTF-8
和最接近的Accept
请求头匹配项。需要注意的是,Accept
请求头的最接近匹配并不总是完全正确的。有时会导致application/xhtml+xml
,因为在Facelets的URL中存在.xhtml
扩展名,并且Web浏览器没有默认配置为将其解释为text/html
(如MSIE)。通过明确设置为text/html
,您真的希望避免这种错误的内容类型。<ui:define>
的直接子级。但是,规范位置是作为<html>
的直接子级,从而包装<h:head>
和<h:body>
。这也是在传统的JSP中完成的方式,在那里它实际上是必需的。在Facelets中,它是可选的并被视为元数据。
<f:subview>
将创建另一个命名容器上下文。当您想要在同一视图根中多次重复使用包含固定组件ID的包含文件时,这非常有用,否则您将收到重复组件ID错误。然而,自从JSF 2.0以来,这样的包含文件最好是一个本身就是命名容器的组合组件。
如果您没有指定它,则在视图中物理多次重用具有相同ID的组件不会造成任何影响。