JSF preRenderView вызывается слишком много раз

У моей страницы / bean-компонента событие preRenderView запускается дважды при загрузке первой страницы, затем 2 + n раз для каждой обратной передачи, где n - количество произошедших обратных передач (включая текущую).

Прочитав здесь несколько других сообщений, я переместил за пределы и это уменьшило количество вызовов preRenderView на один. То есть он вызывается один раз при полной загрузке страницы и 1 + n раз для каждой обратной передачи. Я даже попытался переместить тег за пределы , но это не дало результата.

Я не уверен, что это актуально: на странице используется шаблон:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:fb="http://www.facebook.com/2008/fbml">
    <f:view contentType="text/html">
        <ui:insert name="metadata"/>
        <h:head>
            <!-- Some stuff here -->
            <ui:insert name="content"/>
            <!-- More stuff here -->
        </h:head>
        <h:body>
        </h:body>
    </f:view>
</html>

И соответствующие биты страницы:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title></title>
    </h:head>
    <h:body>
        <ui:composition template="/WEB-INF/templates/myLayout.xhtml">
            <ui:define name="windowTitle">My Page</ui:define>
            <ui:define name="metadata">
                <f:event type="preRenderView" listener="#{myBean.preRenderView}"/>
            </ui:define>
            <ui:define name="content">
                <!-- Some content here -->
                <h:panelGroup id="reRenderable" layout="block">
                    <!-- More content here -->
                    <h:form prependId="false">
                        <h:outputLabel for="mySelector" value="Item:"/>
                        <h:selectOneMenu id="mySelector"
                                         value="#{myBean.item}"
                                         converter="#{myConverter}"
                                         validator="#{itemActiveValidator.validate}">
                            <f:selectItems value="#{myBean.myItems}"/>
                            <f:ajax render=":reRenderable"/>
                        </h:selectOneMenu>
                    </h:form>
                    <!-- More content here -->
                </h:panelGroup>
                <!-- More content here -->
            </ui:define>
        </ui:composition>
    </h:body>
</html>
5
задан Arjan Tijms 8 January 2012 в 12:21
поделиться