Как добавить проверку подтверждения для кнопки, вызывающей удаленную команду

#jsf #primefaces

Вопрос:

У меня есть ситуация в primefaces, где у меня есть кнопка, которая при нажатии вызывает удаленную команду через java-скрипт в качестве обратного вызова, эта удаленная команда отвечает за выполнение действия сохранения. Я хочу добавить подтверждение к кнопке сохранения на основе некоторого значения контроллера. Таким образом, ожидаемый результат при нажатии, если это значение верно, я хочу показать диалоговое окно подтверждения, иначе я просто хочу сделать обычное сохранение.

Я действительно новичок в примерах. Любая помощь будет высоко оценена.

<p:remoteCommand name="save" actionListener="#{controller.save()}" oncomplete="PF('statusDialog').hide()"/>

<p:button value="Save" styleClass="btn-primary btn-save" onclick="PF('statusDialog').show(); Modeler.saveBpmnToForm(save)" />

Комментарии:

1. Вы пробовали использовать классическую панель подтверждения шрифтов? primefaces.org:8080/витрина/пользовательский интерфейс/наложение/… Если это может вам помочь, вам следует отключить его и включить, оценив ваше логическое условие

2. Hii @SimoneLungarella, классическая доза подтверждения, кажется, работает для меня, у нас есть какой-нибудь другой подход..?

3. Я показываю другой подход в качестве ответа на этот пост

Ответ №1:

Всякий раз, когда вы запускаете remote command действие, вы можете перенаправить его, чтобы отобразить фактическое диалоговое окно подтверждения, затем оттуда вы можете связать действие с кнопкой «подтвердить». Следующая логика предназначена для отображения диалогового окна только в том случае , если у вас есть логическая переменная true , в противном случае вы выполняете save действие, не показывая никакого диалога.

 <p:remoteCommand name="save" actionListener="#{controller.status ? 
controller.showDialog : controller.save}" oncomplete="PF('statusDialog').hide()"/>
 

Всякий раз, когда запускается эта удаленная команда, вы будете показывать следующее диалоговое окно с помощью компонента:

 <p:dialog id="confirmDialog" >
    <p:button value="Confirm" styleClass="btn-primary btn-save" 
    onclick="PF('statusDialog').show()" action="#{controller.save}"/>
    
    <p:button value="Cancel" styleClass="btn-primary btn-cancel" 
    onclick="PF('confirmDialog').hide()"/>
</p:dialog>
 

Кнопка «подтвердить» будет выполнять фактическую логику, кнопка «отмена» должна только закрыть диалоговое окно, но это зависит от вас.