Подтвердить что ты не робот

Как вызвать обновление компонента из javascript в файлах?

Возможно ли обновить компонент PrimeFaces из javascript, чтобы он мог обновиться?

Я делаю вызов сохранения ajax с помощью этой кнопки в диалоговом окне. Я приложил свой собственный 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>

.. во время сохранения, я добавляю сообщение здесь, чтобы отобразить его клиенту с помощью компонента growl.

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

}

Моя проблема в том, как я могу настроить пользовательский интерфейс таким образом, что я должен скрыть диалог перед тем, как компонент рычания может показать сообщение?

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

Что происходит, когда компонент growl отображается вместе с диалогом одновременно.

Спасибо.

4b9b3361

Ответ 1

Для этого вы можете использовать <p:remoteCommand> для PrimeFaces.

<p:remoteCommand name="updateGrowl" update="showmessage" />

который должен быть вызван как

<p:commandButton ... oncomplete="addMemberDlg.hide(); updateGrowl();" />

В этом конкретном случае, однако, более простой способ. Установите атрибут autoUpdate <p:growl> на true.

<p:growl autoUpdate="true" life="1500" id="showmessage"/>

Он будет автоматически обновляться при каждом запросе ajax. Если ваш компонент на самом деле не поддерживал его, вы всегда можете его перенести в <p:outputPanel>, который также поддерживает этот атрибут.

<p:outputPanel autoUpdate="true">
    ...
</p:outputPanel>

Ответ 2

вы всегда можете сделать что-то вроде этого (удалите идентификатор showmessage из атрибута обновления кнопки сохранения)

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

function handleSaveNewMember(xhr, status, args) {
    ...
    jQuery("#myBtn").click();
}

ИЗМЕНИТЬ Но так или иначе в вашем текущем коде не закрывается диалоговое окно в то же время, когда обновляется grwol?

Ответ 3

Мой совет:

  • Используйте <p:remoteCommand> с атрибутом actionListener. Этот атрибут вызывает метод поддержки bean, содержащий код FacesContext.addMessage, таким образом: <p:remoteCommand actionListener="myBean.testMethod()" />
  • Далее, в handleSaveNewMember script, вызовите атрибут remoteCommand name после addMemberDlg.hide(); следующим образом: <p:remoteCommand name="testScript" actionListener="myBean.testMethod()"/>. Тогда function handleSaveNewMember(xhr, status, args) { addMemberDlg.hide(); testScript(); }
  • Добавить атрибут update в remoteCommand указательный компонент growl: <p:remoteCommand name="testScript" actionListener="myBean.testMethod()" update="showmessage" />
  • Ваш commandButton в порядке.

Это сработало для меня.

Привет.

Ответ 4

Почему вы не можете поставить p: Диалог внутри < h: panelGroup > . как

< h:panelGroup id="addUser" rendered = "boolean value " >
    < p:dialog id="addMemberDialog" widgetVar="addMemberDlg" >
        <!-- More Code -->
        < p:commandButton value="Save" actionListener="#{memberManagedBean.createOrUpdate}"
                oncomplete="handleSaveNewMember(xhr, status, args)"
                update=":memberListForm:membersTable createupdateform :showmessage :addUser"
                process="@form" />
    < /p:dialog >
< /h:panelGroup>

boolean значение, которое должно быть установлено в вашем методе сохранения. при установке этого параметра как false в вашем методе сохранения, он не будет отображаться при его обновлении. Так появится сообщение рычание. Но перед вызовом этого метода save это логическое значение установлено как true.

Ответ 5

Вы можете использовать элемент PrimeFaces, называемый p: remotecommand. Этот элемент будет выполнять действие (например, вызвать метод bean) и выполнить обновление после этого действия.

В этом сообщении есть пример http://devdublog.blogspot.com/2015/04/best-way-for-calling-method-of.html.