Ошибка, говорящая, что мне нужно использовать f:metadata, хотя я это делаю

После обновления с 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™ 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

person nivis    schedule 26.06.2013    source источник
comment
Какая реализация/версия JSF 2.2?   -  person BalusC    schedule 26.06.2013
comment
Я добавил больше информации о версиях в конце поста.   -  person nivis    schedule 26.06.2013
comment
У меня сейчас под рукой нет Mojarra 2.2.0, а воспроизвести в Mojarra 2.2.1 не получается. Что, если вы поместите <f:metadata> в свой собственный <ui:define>, который заканчивается в <ui:insert> как непосредственный дочерний элемент <f:view>, в точности как рекомендовано в документации по тегам? docs.oracle.com/javaee/7/ javaserverfaces/2.2/vdldocs/facelets/f/ Mojarra более снисходительна в этом отношении, но известно, что MyFaces терпит неудачу, если не выполняется в соответствии с рекомендацией.   -  person BalusC    schedule 26.06.2013
comment
Я попробую это. Я также использую PrimeFaces, если это может на что-то повлиять. Я не упомянул об этом, так как думал, что это не будет иметь никакого значения.   -  person nivis    schedule 26.06.2013
comment
Не должно :) По крайней мере, не в этом конкретном случае.   -  person BalusC    schedule 26.06.2013
comment
Хорошо. Одним поводом для беспокойства меньше :)   -  person nivis    schedule 26.06.2013
comment
Наконец-то удалось протестировать отдельный ui:define для метаданных. Хотя разницы никакой :/   -  person nivis    schedule 03.07.2013
comment
Что ж, возможно, ваш путь к классам во время выполнения загрязнен несколькими версиями JSF, которые конфликтуют друг с другом. Двойная проверка и очистка.   -  person BalusC    schedule 03.07.2013
comment
Я пытался получить эту информацию, используя ClassLoader.getSystemClassLoader, а затем getURLs(). При печати отображаются только glassfish.jar и flashlight-agent.jar, поэтому я не знаю, как это проверить. Можете ли вы указать мне правильное направление, чтобы найти полный путь к классам?   -  person nivis    schedule 04.07.2013
comment
Я думаю, это ошибка. Я помню, как видел отчет об ошибке, когда помогал кому-то. Я посмотрю, смогу ли я найти ссылку, чтобы быть уверенным.   -  person Andy    schedule 04.07.2013
comment
Да, я перечитал ваш вопрос. Я помню, что читал что-то об этом, но только тогда, когда вы установили свой проект как РАЗРАБОТКА.   -  person Andy    schedule 04.07.2013
comment
Да, я заметил, что когда я установил PROJECT_STAGE в производство, сообщение об ошибке исчезло. Проблема в том, что я действительно не хочу, чтобы во время разработки было установлено значение DEV. Версия 2.2.1 все еще находится в стадии разработки, верно? Пытался найти где скачать, но безуспешно.   -  person nivis    schedule 04.07.2013
comment
Найдено, что он будет выпущен во вторник (9-го)   -  person nivis    schedule 04.07.2013
comment
Надеюсь, задержки нет. Но это работает, я думаю. Постарайтесь игнорировать это, потому что я не думаю.   -  person Andy    schedule 04.07.2013
comment
Это решение, которое я опубликовал ранее, может быть решением. [Обновите реализацию Glassfish 4.0 build 89 Mojarra с 2.2.0 => 2.2.25][1] [1]: stackoverflow.com/questions/10583337/   -  person mookins    schedule 13.01.2014
comment
Это решение, которое я опубликовал ранее, может быть решением. [Обновите реализацию Glassfish 4.0 build 89 Mojarra с 2.2.0 => 2.2.25][1] [1]: stackoverflow.com/questions/10583337/   -  person mookins    schedule 13.01.2014


Ответы (2)


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

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

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

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

person Andy    schedule 04.07.2013

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

person esel    schedule 28.04.2014