是否将 f:event 放在 f:metadata 中是否重要?

Posted

技术标签:

【中文标题】是否将 f:event 放在 f:metadata 中是否重要?【英文标题】:Does it matter whether place f:event inside f:metadata or not? 【发布时间】:2011-11-12 16:20:30 【问题描述】:

w.r.t. How to execute action on GET request with f:viewParam?

<f:metadata>
    <f:viewParam name="id" value="#tInputBean.id" />
    <f:event type="preRenderView" listener="#tInputBean.init" />
</f:metadata>

我很想知道 preRenderView f:event 是否放在 f:metadata 中是否重要。我查看了 Java EE6 教程、Java Server Faces 2.0 Complete Reference 和 Core JSF2,都没有 f:metadata 中的 f:event 示例,但我在网上看到了很多这样的示例。

JSF2 Compl.Ref 说 p.540

f:metadata 标签封装了用于指定的元素集 Facelet 视图的元数据,因此必须是 f:view 标记并且可能不会出现在模板中。从 JSF2.0 开始,唯一 这个标签的目的是封装 f:viewParam 标签。

将 f:event(通常用于支持 f:viewParam)放在 f:metadata 中是否有特殊含义,或者只是为了帮助在视觉/逻辑上将其与 f:viewParam 分组?

【问题讨论】:

【参考方案1】:

不,&lt;f:event&gt; 并不严格要求放在&lt;f:metadata&gt; 中。它可以连接到任何组件。当你有一堆&lt;f:viewParam&gt;s 并且想在所有这些视图参数设置后挂钩&lt;f:event&gt; 来调用一个动作时,它确实是为了纯粹的自我记录目的放在&lt;f:metadata&gt; 中。它甚至可以放在&lt;f:viewParam&gt;s 之外/之前,但它使代码不再具有自我记录性。

请注意,在即将到来的 JSF 2.2 中,将引入一个新的 &lt;f:viewAction&gt; 标记,该标记将替换 &lt;f:metadata&gt; 中的 &lt;f:event type="preRenderView"&gt;

【讨论】:

感谢 BalusC。从那以后,我发现是否将 f:event 放在模板的 f:metadata 中似乎确实很重要(仅):***.com/questions/11069484/…

以上是关于是否将 f:event 放在 f:metadata 中是否重要?的主要内容,如果未能解决你的问题,请参考以下文章

f viewaction 中的 f ajax 之类的东西?

元数据组件需要嵌套在 f:metadata 标记中。建议:将必要的组件包含在 <f:metadata> 中

使用 <ui:composition> 模板时,我应该在哪里声明 <f:metadata>?

使用 <ui:composition> 模板时,我应该在哪里声明 <f:metadata>?

何时调用 <f:metadata><f:viewParam> 的设置器

使用 GET 提交 JSF 表单