重定向后保留JSF消息

mon*_*eyt 6 jsf myfaces jsf-2

我有一个JSF页面(使用MyFaces 2.0),它在第一次显示时会收集一些数据.如果找不到某些信息,则应该提供该效果的消息并重定向回另一个页面.我已经尝试使用此处找到的解决方案保存FacesMessage重定向到JSF中的<h:message>(setKeepMessages(true)),但重定向后没有显示消息.我可以选择的唯一区别是我没有使用导航规则,我在外部上下文上调用redirect()调用,因为这不是在正常操作中发生的.

相关代码:

public void redirectToPageWithMessage(String inPage, String message, FacesMessage.Severity severity){
    getFlash().setKeepMessages(true);
    addMessage(message, severity);
    try {
        getFacesContext().getExternalContext().redirect(inPage);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎不起作用.重定向发生得很好,但<messages />标签没有显示消息.redirect()发生的方式有什么不同可以防止这种情况发生吗?

lu4*_*242 5

保存消息的代码在阶段结束后执行(请参阅 Flash.doPostPhaseActions(FacesContext) )。因此,预计它不起作用,但也许您可以在重定向之前调用 Flash.doPostPhaseActions。Note 不是“干净”的解决方案,但它是可能的。