2014-01-29 72 views
1

我試圖在對話框中顯示在託管bean中完成的驗證結果的消息,但它沒有在提交表單的對話框中顯示。在管理bean的primefaces對話框中顯示驗證消息

請幫我與ID 固定與對話

<p:dialog header="Add LPC" id="lpcDlg" widgetVar="dlg" rendered="true" 
      appendToBody="true" resizable="true" modal="true" height="320px" 
      width="38%"> 
    <h:form id="addLpc"> 
     <div align="center" style="margin-bottom: 1px; padding-bottom: 1px;"> 
      <h:outputLabel value="Add New LPC" 
          style="font-color:#000000;font-weight:bold;font-size:24px;padding-bottom:1px;"></h:outputLabel> 
     </div> 

     <div align="center"> 

      <p:messages id="lpcDlgMsg" showDetail="false" autoUpdate="true" 
         closable="true" /> 
      <p:messages id="lpcDlgMsg2" for="lpcDlgMessage" showDetail="false" 
         autoUpdate="true" closable="true" /> 
      <h:panelGrid id="addLpcForm" columns="2" appendToBody="true"> 

       <h:outputText value="LPC ID" /> 
       <p:inputText id="lpcId" value="#{lpcBean.lpcId}" required="true" 
          requiredMessage="LPC ID is required"> 
        <f:ajax event="blur" render="lpcDlgMsg" /> 
       </p:inputText> 

       <h:outputText value="First Name" /> 
       <p:inputText id="firstName" value="#{lpcBean.firstName}" /> 
       . 
       . 
       . 
       . 
      </h:panelGrid> 
     </div> 
     <div align="center"> 
      <p:commandButton id="submitButton" value="Submit" ajax="true" 
          update=":lpcForm:lpcDataTable,addLpc" 
          action="#{lpcBean.formSubmit}" oncomplete="dlg.hide()" /> 
      <p:commandButton id="cancelButton" value="Cancel" 
          onclick="dlg.hide()" /> 

     </div> 
    </h:form> 
</p:dialog> 

消息這

我的JSF頁面片段lpcDlgMsg2是我試圖顯示在submit.The其他的消息是越來越顯示的消息糾正模糊。

方法的片段,被稱爲上提交

public void formSubmit() 

{ 
     if(resultSet.next()) 
     { 

      int lpcIdCount=rs.getInt("lpcCount"); 
      if(lpcIdCount!=0) 
      { 
       FacesContext.getCurrentInstance().addMessage("lpcDlgMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR," ", "Duplicate LPCID")); 
       System.out.println("after display"); 
      } 
      else 
      { 
       . 
       . 
       . 
       . 
      } 

     } 
    } 

} 

回答

2

這裏是我的建議:

<p:dialog header="Add LPC" id="lpcDlg" widgetVar="dlg" rendered="true" 
      appendToBody="true" resizable="true" modal="true" height="320px" 
      width="38%"> 
    <h:form id="addLpc"> 
     <div align="center"> 
      <p:messages id="lpcDlgMsg" showDetail="false" autoUpdate="true" 
         closable="true" /> 
      <h:panelGrid id="addLpcForm" columns="2" > 
       <h:outputText value="LPC ID" /> 
       <p:inputText id="lpcId" required="true" /> 
       <h:outputText value="First Name" /> 
       <p:inputText id="firstName" required="true" /> 
      </h:panelGrid> 
     </div> 
     <div align="center"> 
      <p:commandButton id="submitButton" value="Submit" 
          oncomplete="if (!args.validationFailed){dlg.hide();}" /> 
      <p:commandButton id="cancelButton" value="Cancel" 
          onclick="dlg.hide()" /> 
     </div> 
    </h:form> 
</p:dialog> 

注意,我已經簡化了你的代碼,以避免使用managedbean。

如果你希望你的託管bean來執行驗證,使用RequestContext的有條件地執行,將關閉對話框並刪除的onComplete提交按鈕的代碼。

if (success) { 
    RequestContext.getCurrentInstance().execute("dlg.hide()"); 
}else{ 
    //show all the messages you need here 
} 
+0

嗨Daniel,調用託管bean中的方法是必要的,因爲我正在數據庫中進行一些檢查,如果主鍵(LPCID)重複,則必須在對話框中顯示錯誤消息而不允許提交。 – rks

+0

我已更新該問題。 –

0

你必須先添加head標籤裏面這個JavaScript

function handleComplete(xhr, status, args) { 
     if (!args.validationFailed) { 
      dlg.hide(); 
     } else { 
     } 
    } 

更多的變化是

<p:commandButton id="submitButton" value="Submit" ajax="true" 
    update=":lpcForm:lpcDataTable,addLpc :lpcDlgMsg2" 
    actionListener="#{lpcBean.formSubmit}" oncomplete="handleComplete(xhr, status, args)" /> 

行動的ActionListener因爲動作有字符串返回類型。 這將工作正常。