3

从 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(内部版本 201306052037)
  • Java:1.7.0_25;Java HotSpot(TM) 客户端虚拟机 23.25-b01
  • Runtime: Java(TM) SE 运行时环境 1.7.0_25-b16
  • Java EE:Java EE 7 网络
  • JSF implementation: 莫哈拉 2.2.0
  • Glassfish: 4.0 构建 89
4

2 回答 2

2

针对 JSF 2.2 报告的错误。不久前我正在处理同样的问题。

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

您可能还想远离f:viewActions

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

于 2013-07-04T07:38:34.013 回答
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)为我解决了这个问题。

于 2014-04-28T08:30:11.230 回答