2013-03-27 81 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

相關問題