Kiv*_*iva 11 navigation jsf-2 flash-scope
我对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";
}
Run Code Online (Sandbox Code Playgroud)
这只是一个测试,但我想要使用的真实对象更复杂.
这是闪存使用的第二页:
<ui:fragment rendered="#{flash.test != null and flash.test.hasMessage()}" >
<ui:repeat var="message" value="#{flash.test.messages}">
#{message}
</ui:repeat>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)
这是导航(这是我的问题:)):
<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>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,闪存范围工作正常,我的消息出现.
但是如果我在导航的情况下添加一个重定向,我在Flash地图中的对象就消失了.
我不明白为什么我不能在导航规则中使用重定向(我相信这是flash范围的目标).
我的代码可能有问题.
有人可以帮帮我吗?
谢谢
Bal*_*usC 14
Mojarra对JSF2 Flash范围的实现存在很多问题.每一个新的Mojarra版本都解决了大多数问题.目前,使用最新的Mojarra版本 2.1.6,据我所知仍然只有一个主要的开放问题:如果你重定向到不同的基本路径,它将无法工作.另见第1751期长篇讨论中的(当前)最后评论.
现在,您基本上有以下选项:
当您需要重定向到不同的基本路径时忘记使用Flash.请改用请求参数或尝试使用自定义cookie模拟闪存范围.
如果可能,请重新组织文件夹结构,以便在需要闪存范围生存时不需要重定向到其他基本路径.
试试MyFaces而不是Mojarra.也许它在闪存范围方面做得更好.
更新:根据问题2136,在即将到来的Mojarra 2.1.14中解决了在不同路径上重定向后Flash范围无法使用的最后一个问题.因此,对于此版本,到目前为止发现和打开的所有 Flash范围相关问题都应该被解决和关闭.