从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:viewParam
或f: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 答案 0 :(得分:2)
针对JSF 2.2报告的错误。我曾经回答过同样的问题。
https://java.net/jira/browse/JAVASERVERFACES-2803
您可能还希望远离f:viewActions
。
答案 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)解决了我的问题。