Flash 范围内的对象在重定向后不可用

发布于 2025-01-03 04:26:58 字数 1208 浏览 0 评论 0原文

我对 jsf 2 中 flash 作用域的使用有一个误解。 我想在操作过程中将一个对象放入 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 范围的目标)。

我的代码可能有问题。

有人可以帮助我吗?

谢谢

I have a misunderstanding with the use of flash scope in jsf 2.
I want to put an object in flash map during my action and show this object in the next page.
Here is my action (call by h:commandLink):

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

It's just a test, but the real object I want to use is more complex.

Here is the second page with the flash use:

<ui:fragment rendered="#{flash.test != null and flash.test.hasMessage()}" >
    <ui:repeat var="message" value="#{flash.test.messages}">
        #{message}
    </ui:repeat>
</ui:fragment>

Here is the navigation (and here is my problem :) ):

<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>

In this case, the flash scope works fine and my message appears.

But if I add a redirect in the navigation case, my object in the flash map has disappeared.

I don't understand why I can't use redirect in the navigation rule (I believed it was the goal of flash scope).

May be something is wrong in my code.

Someone can help me ?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里泪两行 2025-01-10 04:26:58

Mojarra 对 JSF2 Flash 范围的实现 有很多问题。其中大多数问题在每个新的 Mojarra 版本中都得到了解决。目前,在最新的 Mojarra 版本(2.1.6)中,据我所知,仍然只有一个主要的未解决问题:它不会'如果您重定向到不同的基本路径,则不起作用。另请参阅问题 1751 中冗长讨论中的(当前)最后评论。

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

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

  2. 如果可能,请重新组织文件夹结构,以便在需要闪存作用域生存时不需要重定向到不同的基本路径。

  3. 尝试 MyFaces 而不是 Mojarra。也许它在 Flash 范围方面做得更好。


更新:根据issue 2136,Flash范围不可用的最后一个开放问题在即将推出的 Mojarra 2.1.14 中解决了不同路径上的重定向之后。因此,在此版本中,到目前为止,所有与 Flash 范围相关的问题均已被发现并已解决
应该解决并关闭。

The Mojarra's implementation of the JSF2 Flash scope had a lot of problems. Most of them were resolved with every new Mojarra release. Currently, with the latest Mojarra version, the 2.1.6, there's as far as I know still only one major open problem: it won't work if you redirect to a different base path. See also the (currently) last comment in the long discussion in issue 1751.

Right now, you have basically the following options:

  1. Forget using Flash when you need to redirect to a different base path. Use a request parameter instead or try to simulate the flash scope with a custom cookie.

  2. If possible, reorganize the folder structure so that you don't need to redirect to a different base path when you need the flash scope to survive.

  3. Try MyFaces instead of Mojarra. Maybe it does it better with regard to flash scope.


Update: as per issue 2136, the last open problem of Flash scope not being available after a redirect on a different path is solved in the shortly upcoming Mojarra 2.1.14. So with this version, all Flash scope related problems discovered and open so far
should be solved and closed.

绝影如岚 2025-01-10 04:26:58

带有 netbeans 的 jsf 2.1 对于 flash 存在此问题。使用 /somepage?redirect-faces=true 或 /somedirectory/somepage?faces-redirect=true 不起作用。它必须是 somepage?redirect-faces=true

测试了mojarra 2.1.7,没有出现上述问题。

jsf 2.1 with netbeans has this problem with flash. using /somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true does not work. it has to be somepage?redirect-faces=true.

tested mojarra 2.1.7, but it didn't have the above problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文