错误说我需要使用f:元数据,即使我这样做

时间:2013-06-26 08:36:08

标签: jsf metadata jsf-2.2

从JSF 2.1更新到2.2后,我开始收到以下错误消息:

The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>

这有点奇怪,因为代码看起来像这样:

....
 <ui:composition template="./resources/templates/template_base.xhtml">

        <ui:define name="contentBody">

            <h:outputStylesheet library="css/table" name="tableContent.css" />
            <h:outputScript library="javascript" name="pagination.js" target="head" />

            <p:growl id="messages" autoUpdate="true" />

            <f:metadata>
                <f:viewParam name="topicId" value="#{topicBean.topic.id}" />
                <f:event type="preRenderView" listener="#{topicBean.init(true)}" />
            </f:metadata>

        </ui:define>

</ui:composition>
....

如果错误消息引用的元数据组件是f:viewParamf:event,那么我确实将它/它们包含在f:metadata中。

关于我做错了什么的任何想法?如果我将javax.faces.PROJECT_STAGE设置为Production,则不会显示错误,但我希望将其保留在Development中,直到我完成。

Edit1 - 版本:

  • Netbeans:7.3.1(Build 201306052037)
  • Java:1.7.0_25; Java HotSpot(TM)客户端VM 23.25-b01
  • Runtime:Java(TM)SE运行时环境1.7.0_25-b16
  • Java EE:Java EE 7 Web
  • JSF implementation:Mojarra 2.2.0
  • Glassfish:4.0 build 89

2 个答案:

答案 0 :(得分:2)

针对JSF 2.2报告的错误。我曾经回答过同样的问题。

https://java.net/jira/browse/JAVASERVERFACES-2803

您可能还希望远离f:viewActions

https://java.net/jira/browse/JAVASERVERFACES-2868

答案 1 :(得分:0)

我使用完全相同的配置(Glassfish,Mojarra 2.2.0)并发现如果我在元数据标记中只使用一个子节点并将侦听器放在其外部,我可以绕过错误消息。

<f:event type="preRenderView" listener="#{bean.listener()}"/>
<f:metadata>
    <f:viewParam name="par1" value="#{bean.val1}" />
</f:metadata>

如果您使用两个viewParams,则会再次出现此问题,请参阅https://java.net/jira/browse/JAVASERVERFACES-3080

升级到最新的Mojarra版本(截至目前为2.2.6)解决了我的问题。