ipa*_*ipa 5 ajax primefaces jsf-2
在表格上我有一些个人信息(姓名,地址等)和一个changeListener,它根据性别和姓氏更新称呼和致敬.如果底层实体已经存储在数据库中,它可以正常工作.如果我输入新(未保存)条目的数据,则在调用侦听器后重置表单.输入的所有数据都丢失了,只保留了我在听众和性别中修改的称呼,字母变换,我使用的姓名和附加ajax呼叫.
这是表单的一部分:
<h:form id="person">
<p:panel header="#{msg['prs']}">
<h:panelGrid columns="6" cellpadding="4">
<h:outputText value="#{msg['prs.salutation']}"/>
<p:inputText value="#{personBean.selectedPerson.salutation}"/>
<h:outputText value="#{msg['prs.lettersalutation']}"/>
<p:inputText value="#{personBean.selectedPerson.letterSalutation}"/>
<p:spacer/><p:spacer/>
<h:outputText value="#{msg['prs.name']}: "/>
<p:inputText value="#{personBean.selectedPerson.name}">
<p:ajax event="change" update="person"
listener="#{personBean.selectedPerson.updateSalutation}" />
</p:inputText>
<h:outputText value="#{msg['prs.surname']}: "/>
<p:inputText value="#{personBean.selectedPerson.surname}"/>
<h:outputText value="#{msg['prs.gender']}: "/>
<p:selectOneMenu value="#{personBean.selectedPerson.gender}">
<f:selectItems value="#{enumHelper.getEnum('Gender')}"/>
<p:ajax event="change" update="person"
listener="#{personBean.selectedPerson.updateSalutation}" />
</p:selectOneMenu>
</p:panel>
</h:form>
Run Code Online (Sandbox Code Playgroud)
在代码中我做了更新.
public void updateSalutation() {
// simplified
letterSalutation = "...";
salutation = "...";
// outputs for debug
System.out.println(this.getName()); // --> not null
System.out.println(this.getSurname()); // --> null
}
Run Code Online (Sandbox Code Playgroud)
已经在这个调用中的姓氏,即使在那里输入了数据,它也没有附加到ajax调用.所有其他领域也是如此.在我的应用程序中,我使用的是Primefaces,JavaEE 1.6和Wildfly.
这种行为的原因是什么?有什么我可以改变我的电话来防止这种情况吗?
Bal*_*usC 15
为什么在使用Primefaces更新ajax后字段会重置
此问题有两种可能的原因,具体取决于具体的功能要求:
这是因为你没有告诉JSF处理所需的输入值.
或者,这是因为您告诉JSF也更新了不需要的输入值.
解决方案取决于原因:
添加process="person"
(或process="@form"
)以<p:ajax>
处理整个表单.
或者,编辑update="person"
以仅指定真正需要更新的组件.
鉴于您在问题的最后提出了投诉,我相信您正在寻找#1.
归档时间: |
|
查看次数: |
12002 次 |
最近记录: |