gpt4 book ai didi

jsf - 在 MyFaces 中重定向后在 Mojarra 中工作时不显示 Flash 消息

转载 作者:行者123 更新时间:2023-12-04 14:44:19 25 4
gpt4 key购买 nike

我有自己的 ExceptionHandlerWrapper 来管理 ViewExpiredException 和其他错误。

想法是捕获错误,添加一些错误消息并重定向(使用重定向,而不是导航)到索引页面,错误消息将显示在该页面上。

    fc.getExternalContext().getFlash().setKeepMessages(true);
Messages.addFlashError(null, "my message");
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
flash.put("foo", "hello");
fc.getExternalContext().redirect("index.xhtml");

但是,不会存储 flash 消息(但 foo 存在于 flash 作用域中)。

这在 mojarra 中工作,但我转移到 myfaces 2.2.4,它停止工作。任何想法? (也使用 omnifaces 1.8.1)谢谢。

最佳答案

我查看了 MyFaces 源代码,他们似乎明确需要额外的 Flash#setRedirect()Flash#setKeepMessages()之上打电话.尽管 Javadoc 对此并不清楚,但我希望调用 setRedirect(true) 只是 Flash 属性所必需的,而不是 Flash 消息,它有自己的 setKeepMessages(true ) 调用。

所以,基本上,您应该执行以下操作:

fc.getExternalContext().getFlash().setKeepMessages(true);
Messages.addFlashError(null, "my message");
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
flash.put("foo", "hello");
fc.getExternalContext().getFlash().setRedirect(true); // <-- Add this.
fc.getExternalContext().redirect("index.xhtml");

但是,由于您已经在使用 JSF 实用程序库 OmniFaces ,当您使用 Messages#addFlashXxx() 时,它已经隐式调用了 setKeepMessages(true)方法,并在使用 Faces#redirect() 时隐式调用 setRedirect(true)方法,您可以仅使用以下与上面的“困惑”完全相同的方法:

Messages.addFlashGlobalError("my message");
Faces.setFlashAttribute("foo", "hello");
Faces.redirect("index.xhtml");

不需要自定义阶段监听器。

关于jsf - 在 MyFaces 中重定向后在 Mojarra 中工作时不显示 Flash 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25178730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com