Запретить открытие диалога подтверждения при наличии ошибки проверки

У меня есть текстовая область внутри вкладки панели аккордеона, которая является описанием. Я пытаюсь редактировать описание и сохранять его. Я проверяю текстовую область так, чтобы максимальный символ не превышал 1000 символов. Я использую <p:message> для отображения сообщения проверки. Перед фактическим сохранением отобразится диалог подтверждения, подтверждающий сохранение.

<p:messages showDetail="true" autoUpdate="true" />

<p:accordionPanel dynamic="true">
    <p:tab id="_0" title="description">
        <p:inputTextarea styleClass="max" id="editDesc1" widgetVar="txtBox" value="#{testBean.description}" 
            rows="6" cols="150" validatorMessage="#{msg.AddSystem_validationMsg5}" autoResize="false">
            <f:validateLength maximum="1000"></f:validateLength> 
        </p:inputTextarea>

        <p:commandButton value="save"  oncomplete="saveDialog.show()"/>

        <p:confirmDialog message="#{msg.EditSystem_confirmMsg1}" width="200" 
            showEffect="explode" hideEffect="explode" 
            header="Confirm" severity="alert" widgetVar="saveDialog"> 
            <p:commandButton value="#{msg.EditSystem_confirmAnswer1}"  action="#{testBean.saveEdit}" process="@this" /> 
            <p:commandButton value="#{msg.EditSystem_confirmAnswer2}" onclick="saveDialog.hide()" type="button" /> 

Если пользователь вводит более 1000 символов и пытается его сохранить, тогда сообщение проверки будет отображаться в течение короткого времени, а затем появится диалог подтверждения, в результате чего сообщение проверки исчезнет. Как предотвратить появление диалога подтверждения при возникновении ошибки проверки?

Ответ 1

Вам нужно проверить oncomplete кнопки сохранения, если проверка не завершилась. PrimeFaces помещает глобальный объект args в область JavaScript, который, в свою очередь, имеет свойство boolean validationFailed. Вы можете использовать его:

<p:commandButton value="save" oncomplete="if (args &amp;&amp; !args.validationFailed) saveDialog.show()"/>

Таким образом, диалог подтверждения будет отображаться только в том случае, если проверка не прошла.

Ответ 2

Я думаю, вы можете использовать javascript для проверки:

<script type="text/javascript">
function test(){
// validation here
if(isValidated){saveDialog.show()}
else alert('exceed ...');
}
</script>
<p:commandButton value="save"  onclick="test()"/>