Как показать всплывающее окно в файлах с требуемыми сообщениями, только если эти сообщения существуют?

Я хочу показать всплывающее окно с необходимыми сообщениями некоторых полей inputText, когда я нажимаю кнопку отправки. Но только в случае появления этих сообщений. Я попытался с переменной bean и javascript в теге oncomplete, но я не могу заставить его работать правильно. Если я поставлю visible = "true" в диалоговом окне p: всплывающее окно всегда отображается, хотя я пытаюсь управлять им из commandButton. Теперь у меня есть это, но всплывающее окно никогда не отображается:

<h:inputText id="Scheme" 
            required="true"
            requiredMessage="Required.">
</h:inputText>

<h:commandButton id="submitModify" value="#{msg['systemdetail.modify']}"
             action="#{sistem.modify}"
             oncomplete="if (#{facesContext.maximumSeverity != null}) {dlg1.show();}">
</h:commandButton>

<p:dialog id="popup"
          style="text-align:center"
          widgetVar="dlg1"
          modal="true">  
    <h:messages layout="table"/>
</p:dialog> 

Как я могу это сделать? Спасибо заранее.

Ответ 1

Стандартные JSF и PrimeFaces не поддерживают оценку EL на основе запроса в атрибутах on*. Только RichFaces поддерживает это. Кроме того, стандартный JSF <h:commandButton> не имеет атрибута oncomplete. Вероятно, вы сбиваете с толку PrimeFaces <p:commandButton>

Существует несколько способов добиться этого:

  • Проверьте условие в атрибуте visible <p:dialog>.

    <p:dialog visible="#{not empty facesContext.messageList}">
    

    или если вы хотите показывать только сообщения проверки, а не все сообщения

    <p:dialog visible="#{facesContext.validationFailed}">
    

  • Вместо этого используйте PrimeFaces <p:commandButton>, API-интерфейс PrimeFaces поддерживает условие #{facesContext.validationFailed} через объект args:

    <p:commandButton ... oncomplete="if (args.validationFailed) dlg1.show()" />
    

Ответ 2

Если вам нужно проверить, для каких сообщений, это способ, которым я работал с файлами. Так как после завершения обновления, после обновления компонента, содержащего функцию javascript, вызываются после того, как будут выполнены неполные объекты, функция javascript может быть перестроена с использованием последних значений # facesContext.maximumSeverity} перед выполнением.

<p:commandButton
    oncomplete="executeAfterUpdate()"
    update="updatedBeforeOnComplete"/>

<h:panelGroup id="updatedBeforeOnComplete">
    <script language="JavaScript" type="text/javascript">
        //
        function executeAfterUpdate(){
            if (#{facesContext.maximumSeverity==null
               or facesContext.maximumSeverity.ordinal=='1'})
            {
                // your code to execute here
                someDialog.show();
            }
        }
        //
    </script>
</h:panelGroup>