Запретить открытие диалога подтверждения при наличии ошибки проверки
У меня есть текстовая область внутри вкладки панели аккордеона, которая является описанием. Я пытаюсь редактировать описание и сохранять его. Я проверяю текстовую область так, чтобы максимальный символ не превышал 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 && !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()"/>