jsf-2 - 重定向后 Flash 范围内的对象不可用

标签 jsf-2 navigation flash-scope

我对在 jsf 2 中使用 flash 范围有误解。
我想在我的操作过程中将一个对象放入 Flash map 中,并在下一页中显示该对象。
这是我的操作(通过 h:commandLink 调用):

public String showDetail(PersonneDTO personne) {
    MessageFlashBean message = new MessageFlashBean();
    message.addMessage("test");
    FacesContext.getCurrentInstance().getExternalContext().getFlash()
        .put("test", message);
    return "showDetail";
}

这只是一个测试,但我要使用的真实对象更复杂。

这是使用 flash 的第二页:
<ui:fragment rendered="#{flash.test != null and flash.test.hasMessage()}" >
    <ui:repeat var="message" value="#{flash.test.messages}">
        #{message}
    </ui:repeat>
</ui:fragment>

这是导航(这是我的问题:)):
<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>showDetail</from-outcome>
        <to-view-id>/private/showDetail.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

在这种情况下,闪光范围工作正常,我的消息出现。

但是如果我在导航案例中添加重定向,我在闪存图中的对象就消失了。

我不明白为什么我不能在导航规则中使用重定向(我认为这是 flash 范围的目标)。

可能是我的代码有问题。

有人可以帮助我吗?

谢谢

最佳答案

Mojarra 对 JSF2 Flash 范围的实现 had a lot of problems .大多数问题都在每个新的 Mojarra 版本中得到解决。目前,用最新的Mojarra version ,在 2.1.6 中,据我所知,仍然只有一个主要的未解决问题:如果您重定向到不同的基本路径,它将无法工作。另请参阅 issue 1751 中长时间讨论中的(当前)最后一条评论.

现在,您基本上有以下选择:

  • 当您需要重定向到不同的基本路径时,请忘记使用 Flash。改用请求参数或尝试使用自定义 cookie 模拟 flash 范围。
  • 如果可能,请重新组织文件夹结构,以便在需要 Flash 作用域生存时无需重定向到不同的基本路径。
  • 试试 MyFaces而不是莫哈拉。也许它在闪光范围方面做得更好。


  • 更新 :根据 issue 2136 ,在即将推出的 中解决了在不同路径上重定向后 Flash 作用域不可用的最后一个开放问题。莫哈拉 2.1.14 .所以在这个版本中,所有与 Flash 范围相关的问题都被发现并打开了
    应该解决并关闭。

    关于jsf-2 - 重定向后 Flash 范围内的对象不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148798/

    相关文章:

    java - 从其他位置(数据库、http...)加载 JSF facelets 文件(模板、 View )

    html - 如何获取当前 View HTML 源并将其作为字符串传递 JSF ManagedBean

    java - PrimeFaces 3.5 编辑器无法清除文本

    javascript - 如何在 React-native 中获取 NavigatorIOS 的 'child controllers' 引用?

    java - ZK - 将用户重定向回上一页

    vue.js - VUE 3 JS 中的 window.location.href

    jsf-2 - 禁用 oam.Flash.RENDERMAP.TOKEN

    jsf-2 - 从 f :phaselistener 重定向后不显示 Flash 消息

    jsf-2 - com.sun.faces.context.flash.ELFlash.loggingGetPhaseMapForReading 处的 java.lang.NullPointerException

    java - 重复的 JSF 消息