0

我有一个带有如下对话框的页面。如果信息已经存在于同一个对话框中,我想向用户显示一条错误消息。这部分工作正常。

但是,如果一切顺利,对话框应该关闭并且“成功”消息应该显示在调用页面上(例如在 JSF 模板 p:messages 中)。我无法让它工作,消息消失了。我尝试了几个选项,包括远程命令。

<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 方法 save()

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."));
}

我觉得我接近解决方案:)

感谢您的帮助,科恩

4

1 回答 1

0

p:messages元素应放置在p:dialog. 通过关闭对话框,所有子元素都会被隐藏,包括消息。

于 2012-09-27T06:41:56.290 回答