为f:metadata创建复合组件

时间:2012-08-15 15:08:11

标签: jsf-2 metadata facelets composite-component

我想创建一个复合组件,为视图添加一些常见的元数据,例如:

<viewController:metadata controller="orderController"/>

组件:

<composite:interface>
  <composite:attribute name="controller" />
</composite:interface>

<composite:implementation>

  <f:metadata>
    <f:viewParam name="id" value="#{cc.attrs.controller.id}" />
    <f:event type="preRenderView"
      listener="#{cc.attrs.controller.initConversation}" />
  </f:metadata>

</composite:implementation>

我做类似的事情,为所有视图添加一个按钮栏,它工作正常,但似乎用f:元数据不可能。

我是对的还是我的代码有问题?

感谢

1 个答案:

答案 0 :(得分:4)

这是不可能的。 <f:metadata>必须位于与视图ID关联的视图中。另见tag documentation(强调我的):

  

声明此视图的元数据构面。这必须是<f:view>的孩子。 此标记必须位于给定viewId的顶级XHTML文件中,或位于模板客户端中,但不能位于模板中。实现必须确保方面的直接子节点为UIPanel,即使方面只有一个子节点。实现必须将UIPanel的id设置为UIViewRoot.METADATA_FACET_NAME符号常量的值。