【问题标题】:p:ajax not updating p:inputTextp:ajax 不更新 p:inputText
【发布时间】:2015-01-19 04:49:20
【问题描述】:

我无法根据使用<p:ajax> 在另一个<p:inputText> 中输入的值更新<p:inputText>。我正在使用带有 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());
}

【问题讨论】:

  • 以前最好在对话框中放置一个 h:form,并将对话框放在页面中其他表单的下方。你可以试试。否则你有任何控制台错误(在浏览器中)?
  • @JaqenH'ghar:非常感谢,它只是按照您提到的具有自己的 h:form 对话框的方式工作。 (Y)

标签: jsf primefaces


【解决方案1】:

就像 Jaqen 在 cmets 中提到的那样,cmets 在对话框中使用 h:form

如果您想从 ManagedBean 更新组件,您可以使用 org.primefaces.RequestContextupdate 方法来完成。

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

如果您觉得这种方法过于内聚,您可以仅从 Facelet 更新,请确保不要将 p:dialog 放在 h:from 中,而是在 p:dialog 中使用 h:form

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2014-08-09
    • 2018-05-13
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多