p:ajax不更新p:inputText

时间:2014-11-21 05:20:53

标签: jsf primefaces

我无法使用<p:inputText>根据在另一个<p:inputText>中输入的值更新<p:ajax>。我正在使用带有PrimeFaces 5的JSF 2.第二个<p:inputText>没有更新,正在调用与<p:ajax>相关联的监听器,我在监听器中获取了正确的值,但它没有在视图上更新。

视图代码为:

<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 个答案:

答案 0 :(得分:0)

与Jaqen在评论中提到的一样,评论在对话框中使用h:form

如果要从ManagedBean更新组件,可以使用org.primefaces.RequestContext的{​​{1}}方法执行此操作。

update

如果您认为此方法过于具有凝聚力,则只能从Facelet更新,请务必记住不要将RequestContext.getCurrentInstance().update("COMPONENT_ID_TO_UPDATE") 放在p:dialog中,而是使用h:from h:form }。