Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在重定向后保留JSF消息_Jsf_Jsf 2_Myfaces - Fatal编程技术网

在重定向后保留JSF消息

在重定向后保留JSF消息,jsf,jsf-2,myfaces,Jsf,Jsf 2,Myfaces,我有一个JSF页面(使用MyFaces2.0),它在第一次显示时会收集一些数据。如果它找不到一些信息,它应该提供一条这样的消息,并重定向回另一个页面。我尝试使用这里找到的解决方案(setKeepMessages(true)),但重定向后消息不会显示。唯一的区别是我没有使用导航规则,而是在外部上下文中调用redirect()调用,因为这不是在正常操作中发生的 相关代码: public void redirectToPageWithMessage(String inPage, String mess

我有一个JSF页面(使用MyFaces2.0),它在第一次显示时会收集一些数据。如果它找不到一些信息,它应该提供一条这样的消息,并重定向回另一个页面。我尝试使用这里找到的解决方案(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();
    }
}

不幸的是,这似乎不起作用。重定向发生得很好,但是标记没有显示消息。redirect()的发生方式是否与此不同,从而阻止了此操作?

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

jsf消息仅用于处理实际请求。使用重定向时会发出第二个请求,因此JSF消息将丢失。EL Flash是解决这一问题的一种方法。这个例子应该是可行的:

我遇到了同样的问题,并没有使用
ExternalContext.redirect()
解决它,而是为了处理您的操作的结果


也就是说,由我的按钮调用的我的操作返回一个
字符串
(结果),该字符串指示要转到下一页的导航规则。在这个系统中,消息被保留下来。

有没有更好的方法(除了调用redirect())在一个不会返回结果的函数中重定向?在尝试了各种方法之后,这是我在JBoss中使用redirect而不是forward的唯一解决方案。你是否错过了关于
setKeepMessages(true)的第一段
和行
getFlash().setKeepMessages(true)问题的代码片段?他已经在使用Flash,但它与
ExternalContext#redirect()
组合使用时无法正常工作。因此,您现在正在转发而不是重定向。因此,您根本不需要
闪存#setKeepMessages()
。或者你实际上根本没有使用它?你是对的,我停止使用它:)事实上,当我遇到这个bug时,我发现了。