使用ajax更新另一个字段

时间:2015-11-15 02:33:36

标签: java events primefaces

查看:

<h:form id="ExamrequisitionsCreateForm">

     <p:selectOneMenu id="examId" value="#{examrequisitionsController.selected.examId}" required="true" requiredMessage="#{bundle.EditExamrequisitionsRequiredMessage_examId}">
          <f:selectItems value="#{examsController.itemsAvailableSelectOne}"
                    var="examIdItem"
                    itemValue="#{examIdItem}"/>
          <f:ajax execute="@this" listener="#{examrequisitionsController.getPriceExam(examItem.id)}" render="ExamrequisitionsCreateForm:price" />
</p:selectOneMenu>

          <p:inputText id="price" value="#{examrequisitionsController.selected.price}" title="#{bundle.CreateExamrequisitionsTitle_price}" required="true" requiredMessage="#{bundle.CreateExamrequisitionsRequiredMessage_price}">

</h:form>

控制器:

public BigDecimal getPriceExam(int id) {
    EntityManager em = Persistence.createEntityManagerFactory("SystemCardiologyReportsPU").createEntityManager();
     List<Exams> examsList = em.createNamedQuery("Exams.findById").
                 setParameter("id", id).getResultList();
     return examsList == null ? null : examsList.get(0).getPrice();
}

我在考试中执行price事件后尝试更新字段change。 我该怎么做?

1 个答案:

答案 0 :(得分:2)

请尝试以下方法:

  1. 删除

       <f:ajax execute="@this" listener="#{examrequisitionsController.getPriceExam(examItem.id)}" render="ExamrequisitionsCreateForm:price" />
    
  2. 并添加

      <p:ajax  listener="#{examrequisitionsController.updatePrice}" update="price"/>
    
    1. 在您的控制器中:

         public void updatePrice (){
              EntityManager em = Persistence.createEntityManagerFactory("SystemCardiologyReportsPU").createEntityManager();
         List<Exams> examsList = em.createNamedQuery("Exams.findById").
               setParameter("id", this.selected.examId ).getResultList();
         this.selected.price == null ? null : examsList.get(0).getPrice();
      }
      

      您的侦听器只需要更新绑定到输入文本的值,并且您的ajax调用只需要更新它。