我已经在这两天苦苦挣扎但没有成功,我认为现在是时候寻求你的帮助了。但首先,这就是我正在使用的:
现在,问题是:我有一个主页面,由几个其他页面使用多个<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
方法无关紧要,因为它只检查field1
和field2
是否符合某些规则并且它是否正常工作。第一次加载主页时出现问题。在这种情况下,personal.xhtml中的<p:ajax />
组件不起作用。我必须重新加载页面(只需按下F5键),这次它就像预期的那样工作。
我一直在改变组件的一些属性,但似乎没有任何效果。我真的不知道还能做什么。任何形式的帮助都会被贬低。
EDITED 即可。又过了一天,我认为问题与Primefaces ajax
组件无关,正如问题的标题所示。我通过以下两个事实得出了这个结论:
<f:ajax .../>
组件的行为保持不变。 DataBacking类已将其范围定义为view
,以便页面可以在向用户显示的过程中“查看”所有属性和方法。但是,我注意到构造函数被调用了两次:第一次加载页面(然后,没有成功调用类的任何方法)以及刷新页面时。在最后一种情况下,页面和类的行为都是预期的行为。