我已经为此苦苦挣扎了两天,但没有成功,我认为现在是时候寻求您的帮助了。但首先,这就是我正在使用的:
- JSF 2 莫哈拉 2.1.1
- Primefaces 3.4.2
- 网豆 7.1.1
- 雄猫 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
无关紧要,因为它只检查field1
和 是否field2
符合某些规则并且它是否正常工作。第一次加载主页时出现问题。在这种情况下,<p:ajax />
personal.xhtml 中的组件不起作用。我必须重新加载页面(只需按 F5 键),这一次它可以正常工作。
我一直在更改组件的一些属性,但似乎没有任何效果。我真的不知道还能做什么。任何形式的帮助将不胜感激。
已编辑。又过了一天,我认为问题与组件无关Primefaces ajax
,正如问题的标题所暗示的那样。我通过以下两个事实得出了这个结论:
- 组件的行为
<f:ajax .../>
保持不变。 - 我发现相对于我第一次加载页面时的视图没有持久化。我会试着解释一下自己。
DataBacking 类已定义其范围,view
以便页面在向用户显示期间可以“看到”所有属性和方法。但是,我注意到构造函数被调用了两次:第一次加载页面(然后,没有成功调用类的方法)和刷新页面时。在最后一种情况下,页面和类的行为都是预期的。