viewScoped类的构造函数被调用两次

时间:2013-03-05 07:36:17

标签: jsf-2 facelets

我已经在这两天苦苦挣扎但没有成功,我认为现在是时候寻求你的帮助了。但首先,这就是我正在使用的:

  • JSF 2 Mojara 2.1.1
  • Primefaces 3.4.2
  • Netbeans 7.1.1
  • Tomcat 7.0.37

现在,问题是:我有一个主页面,由几个其他页面使用多个<ui:include .. />标签组成,如下所示:

<ui:composition template="/resources/templates/template1.xhtml">          
    <ui:define name="appData">
        <p:panelGrid columns="1" id="contenidoAplicacion" styleClass="noborder">
            <h:form id="fNewPerson">
                <p:panel header="New employee" style="min-height:40em">
                    <ui:include src="./forms/personal.xhtml" />
                    <p:accordionPanel  styleClass="noborder" activeIndex="3">
                        <p:tab id="tabSomeData" title="Identidad profesional" >
                            <ui:include src="./forms/formSomeData.xhtml" />
                        </p:tab>
                         ....
                         ....
    </ui:define>
</ui:composition> 

personal.xhtm文件如下所示:

<p:panelGrid>
    <p:row>
        <p:column >
            <h:outputLabel value="Field1"/>
            <p:inputText label="Field1" id="field1" value="#{dataBacking.selectedPerson.field1}" tabindex="1"
                         required="true" size="10" >
                <f:convertNumber for="field1" integerOnly="true" groupingUsed="false"/>
            </p:inputText>
            <p:inputText id="field2" value="#{dataBacking.selectedPerson.field2}" tabindex="2" required="true" size="1" maxlength="1" >
                <p:ajax event="keyup" listener="#{dataBacking.check}" 
                        process="field1 field2" partialSubmit="true" 
                        update="field1 field2 photo"/>
            </p:inputText>
        </p:column>
        <p:column rowspan="5" >
            <p:graphicImage id="photo" value="#{dataBacking.selectedPerson.photo}" width="90" />
        </p:column>
    </p:row>
    ...

</p:panelGrid>

check()类中的dataBacking方法无关紧要,因为它只检查field1field2是否符合某些规则并且它是否正常工作。第一次加载主页时出现问题。在这种情况下,personal.xhtml中的<p:ajax />组件不起作用。我必须重新加载页面(只需按下F5键),这次它就像预期的那样工作。

我一直在改变组件的一些属性,但似乎没有任何效果。我真的不知道还能做什么。任何形式的帮助都会被贬低。

EDITED 即可。又过了一天,我认为问题与Primefaces ajax组件无关,正如问题的标题所示。我通过以下两个事实得出了这个结论:

  • <f:ajax .../>组件的行为保持不变。
  • 我发现相对于我第一次加载页面的视图没有保留。我会试着解释一下自己。

DataBacking类已将其范围定义为view,以便页面可以在向用户显示的过程中“查看”所有属性和方法。但是,我注意到构造函数被调用了两次:第一次加载页面(然后,没有成功调用类的任何方法)以及刷新页面时。在最后一种情况下,页面和类的行为都是预期的行为。

0 个答案:

没有答案