我的xhtml中有以下内容
<p:accordionPanel id="existing-list" value="#{eventBean.registrations}" var="entry" >
<p:ajax event="tabChange" listener="#{eventBean.onRegistrationTabChange}" update="existing" />
<p:tab title="#{entry.fullName}" >
<h:panelGrid columns="2" cellpadding="5">
<h:panelGrid id="car" columns="1" border="0" cellpadding="10" cellspacing="1" styleClass="centre-content">
<rich:dataTable value="#{entry.formFields}" var="field" id="table" columnClasses="field-label,field-value">
<rich:column>
<h:outputText value="#{field.fieldLabel}"/>
</rich:column>
<rich:column>
<h:inputText value="#{field.fieldValue}" size="#{field.length}" rendered="#{field.fieldType == 'text'}">
<f:ajax/>
</h:inputText>
</rich:column>
</rich:dataTable>
<h:commandButton action="#{formBean.refreshForm}" immediate="true" styleClass="refresh-button"
style="background-color: white; background-repeat: no-repeat;
background-image: url('images/refresh.gif');background-position: top;background-size: cover;"/>
</h:panelGrid>
<h:panelGrid columns="1" cellpadding="5">
<h:commandButton value="Save" action="#{eventBean.savePreviousEntry}" styleClass="mailme-button"/>
<h:commandButton value="Cancel" action="#{eventBean.cancelPreviousEntry}" immediate="true"
styleClass="mailme-button" render="panel-outer"/>
</h:panelGrid>
</h:panelGrid>
</p:tab>
</p:accordionPanel>
registrations是EventRegistration对象的ArrayList, 每个EventRegistration都包含一个FormField对象的ArrayList, FormField包含fieldLabel和fieldValue
的属性在我的示例中,我在注册中有32个条目,在每个注册中,ArrayList中有两个FormField。
当显示折叠面板时,您可以依次打开每个选项卡并显示fieldValue属性的正确值,但是当按下Save按钮时,将调用第一个注册的第一个FormField对象的setFieldValue方法32次设置(列表中的每次注册一次),以便每个注册的字段值逐渐被相关的fieldValue替换,并以最后一次注册的fieldValue结束。
我在inputText之后添加了f:ajax,以查看更改字段时发生的情况,当焦点离开字段时,这可以正常工作。
我错过了什么?
PF 5.3,面向2.2.8-10,Java 7