Ответ 1
Атрибут PrimeFaces ajax помещает объект args
в область JS, у которого есть свойство validationFailed
. Вы можете просто проверить это в oncomplete
.
<p:commandButton ... oncomplete="if (args && !args.validationFailed) dialogaboutDEQ.show()" />
Если вы выполняете проверку в действии, а не в обычном валидаторе, и вы не можете ее переработать, тогда вам нужно вручную вызвать FacesContext#validationFailed()
.
См. также:
Другой альтернативой является использование RequestContext#execute()
внутри метода действия, чтобы программным образом проинструктировать PrimeFaces выполнить данный кусок JS-кода. Итак, вместо oncomplete
вы также можете сделать это в методе действий:
RequestContext.getCurrentInstance().execute("dialogaboutDEQ.show()");
Если проверка не выполняется, тогда метод действия не вызывается, а затем это также не будет выполнено.
См. также:
Опять другая альтернатива - использовать атрибут диалога visible
. Ваша командная кнопка, по-видимому, обновляет всю форму, включая диалог (хотя диалог сам по себе плохо объявлен с помощью appendToBody="true"
, из-за чего он больше не будет находиться внутри родительской формы, т.е. Должен иметь appendToBody="false"
или иметь собственной формы, но ala). Вы можете проверить, например. на FacesContext#isPostback()
и FacesContext#isValidationFailed()
, если выполняется успешная обратная передача:
<p:dialog ... visible="#{facesContext.postback and not facesContext.validationFailed}">