我有一个带有如下对话框的页面。我想向用户显示错误消息,以防信息已存在于同一对话框中。这部分工作正常。
但是,如果一切顺利,对话框应该关闭并且“成功”消息应该显示在调用页面上(例如,在JSF模板p:消息中)。 我不能让它工作,消息消失了。我尝试了几个选项,包括远程命令。
<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."));
}
我觉得我接近解决方案:)
感谢您的帮助, 科恩
答案 0 :(得分:0)
p:messages
元素应放在p:dialog
之外。通过关闭对话框,所有子元素都会被隐藏,包括消息。