为什么在使用Primefaces更新ajax后字段会重置

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后字段会重置

此问题有两种可能的原因,具体取决于具体的功能要求:

  1. 这是因为你没有告诉JSF处理所需的输入值.

  2. 或者,这是因为您告诉JSF也更新了不需要的输入值.

解决方案取决于原因:

  1. 添加process="person"(或process="@form")以<p:ajax>处理整个表单.

  2. 或者,编辑update="person"指定真正需要更新的组件.

鉴于您在问题的最后提出了投诉,我相信您正在寻找#1.

也可以看看: