何时使用f:view和f:subview

53

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

使用这些标签有哪些好处?

1个回答

84

<f:view>

<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扩展名,并且Web浏览器没有默认配置为将其解释为text/html(如MSIE)。通过明确设置为text/html,您真的希望避免这种错误的内容类型。
请注意,放置位置无关紧要,甚至可以将其放置在模板客户端作为<ui:define>的直接子级。但是,规范位置是作为<html>的直接子级,从而包装<h:head><h:body>。这也是在传统的JSP中完成的方式,在那里它实际上是必需的。在Facelets中,它是可选的并被视为元数据。

参见:


<f:subview>

<f:subview>将创建另一个命名容器上下文。当您想要在同一视图根中多次重复使用包含固定组件ID的包含文件时,这非常有用,否则您将收到重复组件ID错误。然而,自从JSF 2.0以来,这样的包含文件最好是一个本身就是命名容器的组合组件。

如果您没有指定它,则在视图中物理多次重用具有相同ID的组件不会造成任何影响。

另请参见:


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接