2014-11-21 60 views
0

我使用<p:ajax>根據在另一個<p:inputText>中輸入的值,我無法更新<p:inputText>。我正在使用PrimeFaces 5的JSF 2.第二個<p:inputText>未更新,與<p:ajax>關聯的偵聽器正在被調用,並且我正在偵聽器中獲取正確的值,但未在視圖中更新它。p:ajax沒有更新p:inputText

視圖代碼是:

<p:dialog id="newStdDlg" header="Add new Student" widgetVar="newStdDlg" modal="true"> 
    <h:panelGrid id="newStdDlgPanel" columns="2" cellpadding="5" style="width:100%;"> 
     <p:outputLabel value="First Name *" /> 
     <p:inputText id="studentfname" value="#{addStudentBean.student.firstName}"> 
      <p:ajax event="change" update="studentUsrname" listener="#{addStudentBean.firstNameChange}" /> 
     </p:inputText> 

     <p:outputLabel value="Last Name *" /> 
     <p:inputText value="#{addStudentBean.student.lastName}"/> 

     <p:outputLabel value="Father's Name *" /> 
     <p:inputText value="#{addStudentBean.student.fatherName}"/> 

     <p:outputLabel id="uLbl" value="Username (System Generated) *" /> 
     <p:inputText id="studentUsrname" value="#{addStudentBean.student.user.username}" /> 

     <p:outputLabel value="This temporary password would be mailed to user: " /> 
     <p:outputLabel id="stdpassword" value="#{addStudentBean.student.user.password}"/> 
    </h:panelGrid> 

    <p:commandButton value="Create Student" 
        actionListener="#{addStudentBean.addNewStudentAction}" 
        style="margin-left:auto;margin-right:auto;display:block;"/> 
</p:dialog> 

會議的聽衆範圍的管理bean是:

public void firstNameChange() { 
    System.out.println("In AddStudentBean().firstNameChange().........."); 
    System.out.println("The value of student.getFirstName: "+student.getFirstName()); 
    System.out.println("updating system generated username as: "+student.getFirstName()+String.valueOf(new UserDAO().getUserCount()+1)); 
    student.getUser().setUsername(student.getFirstName()+String.valueOf(new UserDAO().getUserCount()+1)); 
    student.getUser().setPassword(KaaloUtils.getPassword()); 
} 
+1

在對話框中使用h:表單並將對話框放置在頁面中的其他表單下方是一種很好的做法。你可以試試它。否則,你有任何控制檯錯誤(在瀏覽器中)? – 2014-11-21 06:32:39

+0

@ JaqenH'ghar:非常感謝你,它的工作方式與你在對話中提到的擁有自己的h:形式的方式一致。 (Y) – Hassan 2014-11-21 06:42:45

回答

0

像Jaqen在評論中提到的註釋中使用h:form內部對話。

如果要從ManagedBean更新組件,可以使用org.primefaces.RequestContextupdate方法來完成此操作。

RequestContext.getCurrentInstance().update("COMPONENT_ID_TO_UPDATE") 

如果你覺得這個方法太凝聚力,你可以從一個facelet只更新,請確保記住不要將p:dialogh:from改用h:formp:dialog