当出现验证错误时,防止打开确认对话框

时间:2013-03-27 02:10:36

标签: validation jsf-2 primefaces dialog messages

我在手风琴面板的标签内有一个文字区域,这是一个描述。我正在尝试编辑说明并保存它。我正在验证文本区域,以便最大字符不应超过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个字符并尝试保存,则会在短时间内显示验证消息,然后会弹出确认对话框,导致验证消息消失。如果出现验证错误,如何防止确认对话框弹出?

2 个答案:

答案 0 :(得分:5)

如果验证未失败,您需要检查保存按钮的oncomplete。 PrimeFaces在JavaScript范围中放置一个全局args对象,而该范围又具有布尔validationFailed属性。你可以利用它:

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

这样,只有在验证没有失败的情况下才会显示确认对话框。

答案 1 :(得分:-1)

我认为你可以使用javascript来验证:

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