2012-09-25 72 views
0

我有一個頁面,如下圖所示的對話框。如果信息已存在於同一個對話框中,我想向用戶顯示錯誤消息。這部分工作正常。但是,如果一切順利,對話框應該關閉,並且「成功」消息應顯示在調用頁面上(例如,在JSF模板p:消息中)。 我無法得到這個工作,消息消失。我嘗試了幾個選項,包括遠程命令。Primefaces Facesmessage隱藏對話框後消失

<p:dialog id="dialogNewMailingList" header="New Mailing List" 
     modal="true" resizable="false" widgetVar="dialogList"> 

     <h:form id="newMailingListForm"> 

      <p:messages id="listMessages" /> 
      <h:panelGrid columns="2"> 
       <h:outputLabel value="Name :" for="listName" 
        style="font-weight: bold;" /> 
       <p:inputText id="listName" 
        value="#{mailingListsEditController.newMailingList.name}" 
        required="true" requiredMessage="Please fill in a Name" size="50" /> 
       <h:outputLabel value="Description :" for="description" 
        style="font-weight: bold;" /> 
       <p:inputText id="description" 
        value="#{mailingListsEditController.newMailingList.description}" 
        required="true" requiredMessage="Please fill in a Description" 
        size="50" maxlength="100" /> 
      </h:panelGrid> 
      <br /> 
      <p:remoteCommand name="updateMessages" update=":messages" /> 

      <p:commandButton 
       action="#{mailingListsEditController.saveMailingList}" 
       update="@form,:mailinglists:selectMailingList" 
       oncomplete="listSaveRequest(xhr, status, args); updateMessages()" 
       value="Save" icon="ui-icon-disk" /> 
      <p:commandButton onclick="dialogList.hide()" value="Cancel" 
       immediate="true" icon="ui-icon-cancel" /> 

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

    <script type="text/javascript"> 
    function listSaveRequest(xhr, status, args) { 
     if(args.validationFailed) { 
      jQuery('#dialogNewMailingList').effect("shake", { times:3 }, 100); 
     } else { 
      //alert('List created successfully.') 
      dialogList.hide(); 
     } 
    } 
    </script> 

bean方法保存()

public void saveMailingList() { 

    log.debug("Saving new MailingList :" + newMailingList.getName()); 

    emailService.save(newMailingList); 

    // show message to the user 
    FacesContext.getCurrentInstance().addMessage("Save Mailing List", 
      new FacesMessage("Mailing List successfully created.")); 
} 

我覺得我很接近的解決方案:)

感謝您的幫助, 科恩

回答

0

p:messages元素應該是放置在p:dialog之外。通過關閉對話框,所有子元素都會隱藏,包括消息。