如何在primefaces中从javascript触发组件刷新?

Mar*_*ada 27 jsf primefaces jsf-2

是否可以从javascript更新PrimeFaces组件,以便强制刷新?

我正在使用对话框中的此按钮进行ajax保存调用.我已经在oncomplete事件上附加了我的自定义javascript.

<p:growl life="1500" id="showmessage"/>
<p:dialog id="addMemberDialog" widgetVar="addMemberDlg">
    <!-- More Code -->
    <p:commandButton value="Save"
        actionListener="#{memberManagedBean.save}"
        oncomplete="handleSaveNewMember(xhr, status, args)"
        update=":memberListForm:membersTable createupdateform "
        process="@form" />
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

..在保存按钮,我在这里添加一条消息,使用growl组件将其显示给客户端.

public void save(ActionEvent event) {
    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
            "Successfuly Add user", "Successfuly Add user");
    FacesContext.getCurrentInstance().addMessage(null, message);

}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何对UI进行排序,我应该在growl组件显示meesage之前先隐藏对话框?

function handleSaveNewMember(xhr, status, args) {
    addMemberDlg.hide();
    //update the growl after the dialog was hidden?
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是,growl组件同时显示在对话框旁边.

谢谢.

Bal*_*usC 51

你可以使用PrimeFaces <p:remoteCommand>.

<p:remoteCommand name="updateGrowl" update="showmessage" />
Run Code Online (Sandbox Code Playgroud)

哪个被调用为

<p:commandButton ... oncomplete="addMemberDlg.hide(); updateGrowl();" />
Run Code Online (Sandbox Code Playgroud)

这种特殊情况下,有一种更简单的方法.设置autoUpdate属性<p:growl>true.

<p:growl autoUpdate="true" life="1500" id="showmessage"/>
Run Code Online (Sandbox Code Playgroud)

它会在每个ajax请求上自动更新.如果您的组件实际上不支持它,那么您始终可以将其包装在<p:outputPanel>也支持该属性的组件中.

<p:outputPanel autoUpdate="true">
    ...
</p:outputPanel>
Run Code Online (Sandbox Code Playgroud)

  • 在 6.2 精英版本中,`autoUpdate="..."` 属性已被弃用,取而代之的是 `&lt;p:autoUpdate&gt;` 标记/元素,该标记/元素也将出现在下一个社区版本中。https://github.com/primefaces/primefaces/wiki/Migration-Guide (2认同)

Dan*_*iel 5

你可以随时做这样的事情(从你的保存按钮更新属性中删除showmessage id)

<h:commandButton style="display:none" id="myBtn" >
    <f:ajax render=":showmessage"/>
</h:commandButton>

function handleSaveNewMember(xhr, status, args) {
    ...
    jQuery("#myBtn").click();
}
Run Code Online (Sandbox Code Playgroud)

编辑 但是,无论如何,在您当前的代码中,是否在更新grwol的同时关闭对话框?