2013-03-27 82 views
1

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

回答

5

您需要在保存按钮的oncomplete检查,如果确认没有故障。 PrimeFaces在JavaScript范围内放置一个全局对象args,该范围又具有布尔型validationFailed属性。你可以使用它:

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

这样确认对话框将只显示如果验证没有失败。

-1

我想你可以使用JavaScript来验证:

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

这完全破坏了服务器端验证的目的和功能。这种方法是绝对不推荐的。 – BalusC 2013-03-27 12:05:26

+0

是的,我忘了args.validationFailed,所以我建议,谢谢! – 2013-03-27 14:19:53

相关问题