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

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

<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> 

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

2 ответа

Решение

Стандартные 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> вместо этого, PrimeFaces JS API поддерживает #{facesContext.validationFailed} состояние через args объект также:

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

Если вам нужно проверить, для каких типов сообщений, вот способ, которым я сделал работу с простыми лицами. Так как основные функции oncomplete вызывается после обновления, путем обновления компонента, содержащего функцию javascript, функцию javascript можно перестроить, используя самые последние значения #faceContext.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>
Другие вопросы по тегам