Ошибка, сказав, что мне нужно использовать метаданные f: хотя я

После обновления с 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 (сборка 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: Моджарра 2.2.0
  • Glassfish: 4.0 build 89

2 ответа

Решение

Ошибка сообщена для JSF 2.2. Я имел дело с той же проблемой некоторое время назад.

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

Вы также можете держаться подальше от f:viewActions также.

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

Я использовал точно такую ​​же конфигурацию (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 на данный момент) решило проблему для меня.

Другие вопросы по тегам