preRenderView-Event, запускаемое перед действием (кнопка команды) - PullRequest
1 голос
/ 19 марта 2012

У меня небольшие проблемы с моим preRenderView-Event.Моя страница также использует командную кнопку для отправки данных, но, к сожалению, preRenderView-Event всегда вызывается до того, как вызывается действие кнопок.

PreRenderView-Event отвечает за загрузку данных из службы.Поскольку страница проста и не требует хранения каких-либо данных, мне не нужны Session или ViewScoped-Beans.

Насколько я понял, событие вызывается в фазе визуализации-отклика, а действие в кнопкедолжно произойти несколько раньше.

<h:body>
    <f:metadata>
        <f:viewParam name="id" value="#{bean.id}" converter="converter.SetOfLongConverter"/>
        <f:event type="preRenderView" listener="#{bean.initializeData}" />
    </f:metadata>

    <ui:composition template="/META-INF/templates/myTemplate.xhtml">
        <ui:param name="title" value="#{bean.title}"/>
        <ui:define name="content">
            <h:outputText value="#{bean.description}" />
            <h:form>
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Model" for="model" />
                        <h:inputText id="model" value="#{bean.model}" />
                        <h:outputLabel value="Manufacturer" for="manufacturer" />
                        <h:inputText id="manufacturer"
                            value="#{bean.manufacturer}" />
                        <h:outputLabel value="Year" for="year" />
                        <h:inputText id="year" value="#{bean.year}" />
                    </h:panelGrid>
                    <h:commandButton value="Create" type="submit"  action="#{bean.create}" rendered="#{bean.createMode}"/>
                    <h:commandButton value="Save" type="submit" action="#{bean.save}" rendered="#{!bean.createMode}" />
                </h:form>       
        </ui:define>
    </ui:composition>
</h:body>

Я добавил несколько консольных сообщений, чтобы проверить, когда вызывается метод в bean-компоненте и когда у меня возникает событие preRenderView, такого никогда не происходит.

Любой совет, что я делаю неправильноздесь

1 Ответ

1 голос
/ 19 марта 2012

<f:metadata> должен идти внутрь <ui:define> <ui:composition>.

См. Также <f:metadata> документация по тегу (выделено мной):

Объявите фасет метаданных для этого представления.Это должно быть дитя <f:view>. Этот тег должен находиться в XHTML-файле верхнего уровня для данного viewId или в клиенте шаблона, но не в шаблоне. Реализация должна гарантировать, что прямым потомком фасета является UIPanel, даже еслиесть только один ребенок аспекта.Реализация должна установить идентификатор UIPanel равным значению символической константы UIViewRoot.METADATA_FACET_NAME.

Простая причина в том, что метаданные должны быть специфичными для представления, а не для шаблона.


Обновление : оказывается, что метод действия вообще не вызывается.У вас есть атрибут rendered на командной кнопке, который в зависимости от симптомов зависит от переменной, основанной на запросе, а не от переменной, основанной на представлении.Помещение управляемого компонента в область просмотра должно решить эту проблему.См. Также commandButton / commandLink / ajax действие / метод прослушивателя не вызван или входное значение не обновлено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...