问题 重定向后,Flash范围中的对象不可用


我对jsf 2中闪存范围的使用存在误解。 我想在操作过程中将对象放在flash地图中,并在下一页显示该对象。 这是我的动作(由h:commandLink调用):

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

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

这是闪存使用的第二页:

<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地图中的对象就消失了。

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

我的代码可能有问题。

有人可以帮帮我吗?

谢谢


5861
2018-02-05 11:21


起源

我已经尝试过JSF 2.0.3.FCS,它确实存在重定向。 - Ravi


答案:


Mojarra对JSF2 Flash范围的实现 有很多问题。每一个新的Mojarra版本都解决了大多数问题。目前,有最新的 Mojarra版本,2.1.6,据我所知,仍然只有一个主要的开放问题:如果你重定向到不同的基本路径,它将无法工作。另见长期讨论中的(目前)最后评论 问题1751

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

  1. 当您需要重定向到不同的基本路径时忘记使用Flash。请改用请求参数或尝试使用自定义cookie模拟Flash范围。

  2. 如果可能,请重新组织文件夹结构,以便在需要闪存范围生存时不需要重定向到其他基本路径。

  3. 尝试 MyFaces的 而不是莫哈拉。也许它在闪存范围方面做得更好。


更新: 按照 问题2136,在即将到来的即将到来的情况下解决了不同路径上的重定向后Flash范围无法使用的最后一个问题 Mojarra 2.1.14。所以有这个版本, 所有 到目前为止发现并打开Flash范围相关问题 应该解决和关闭。


14
2018-02-06 03:33



非常感谢,我使用Mojarra 2.1.6,我没有看到这个bug。这正是我的情况。我将尝试回到2.0.3版本 - Kiva


带有netbeans的jsf 2.1有flash这个问题。运用 /somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true  不起作用。它一定要是 somepage?redirect-faces=true

测试了mojarra 2.1.7,但它没有上述问题。


2
2018-04-01 22:18



我认为这里的IDE并不重要...... - Xtreme Biker