重定向后保留JSF消息

时间:2011-09-21 16:15:40

标签: jsf jsf-2 myfaces

我有一个JSF页面(使用MyFaces 2.0),它在第一次显示时会收集一些数据。如果找不到某些信息,则应该提供该效果的消息并重定向回另一个页面。我已尝试使用此处找到的解决方案Preserving FacesMessage after redirect for presentation through <h:message> in JSF(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();
    }
}

不幸的是,这似乎不起作用。重定向恰好发生,但&lt;消息/&gt;标签未显示消息。 redirect()发生的方式有什么不同可以阻止它工作吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

JSFMessages仅用于处理实际请求。使用重定向时会发出第二个请求,因此JSFMessages将丢失。 EL-Flash是解决这个问题的一种方法。此示例应该有效:http://ocpsoft.com/java/persist-and-pass-facesmessages-over-page-redirects/

答案 2 :(得分:0)

我遇到了同样的问题并且没有使用ExternalContext.redirect()来解决它,而是为了你的行动而发挥作用。

也就是说,我的按钮调用的动作返回String(结果),表示导航规则转到下一页。使用该系统,消息将被保留。