在JSF页面中,验证消息正确显示,但突然消失。当在primefaces命令按钮上将ajax属性设置为false时,会发生这种情况。
以下是JSF managedBean中的action方法
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getFlash().setKeepMessages(true);
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "error.nozipfile", null));
return response().redirectPage(WEB_PAGE_LIST);
primefaces命令按钮
<p:commandButton
value="#{lang.save}"
onclick="PF('importDialog').hide();
PF('ajaxStatusDialog').show();"
action="#{zcmsContentController.actionImport}"
update="@this"
ajax="false"
process="@this"
styleClass="right-button"/>
如何在重定向后保留消息?
答案 0 :(得分:2)
您可以通过在会话范围中放置faces消息来执行此操作,并在另一页的页面加载时检查是否有消息是需要显示的会话。像这样的东西
List<FacesMessage> messages = new ArrayList<FacesMessage>();
messages.add(new FacesMessage(FacesMessage.SEVERITY_INFO, "error.nozipfile", null));
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.put("facesMessages", messages);
在加载其他页面的方法
中if (session.get("facesMessages") != null) {
List<FacesMessage> messages = (List<FacesMessage>)session.get("facesMessages");
for (FacesMessage message : messages) {
context.addMessage(null, message);
}
}