我对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 scope的目标)。
可能是我的代码出了问题。
有人能帮我吗?
感谢
Mojarra对JSF2Flash作用域的实现有很多问题。随着Mojarra的每一次新发布,大多数问题都得到了解决。目前,对于最新的Mojarra版本2.1.6,据我所知,仍然只有一个主要的开放问题:如果你重定向到不同的基本路径,它将不起作用。另见第1751期长期讨论中(目前)的最后一条评论。
现在,您基本上有以下选项:
-
当您需要重定向到不同的基本路径时,请忘记使用Flash。请使用请求参数,或者尝试使用自定义cookie模拟flash作用域。
-
如果可能的话,重新组织文件夹结构,这样当你需要flash作用域生存时,就不需要重定向到不同的基本路径。
-
试试MyFaces而不是Mojarra。也许它在闪光范围方面做得更好。
更新:根据问题2136,在即将到来的Mojarra 2.1.14中解决了在不同路径上重定向后无法使用Flash作用域的最后一个打开问题。因此,使用此版本,迄今为止发现并打开了所有与Flash作用域相关的问题应该解决并关闭。
带有netbeans的jsf 2.1在flash方面存在此问题。使用CCD_ 1是不起作用的。它必须是CCD_ 2。
测试了mojarra 2.1.7,但没有上述问题。