java ee - 重定向到新窗口NPE后的JSF 2.0 ViewScoped Bean

时间:2012-12-12 14:38:35

标签: jsf java-ee jsf-2

我使用这篇文章https://stackoverflow.com/a/13838907中的提示打开新标签,但是当我回到旧标签时,我得到nullPointerException并且我的ViewScoped bean数据丢失了。

<h:form target="_blank">
  <p:commandButton value="open new tab" action="#{otherBean.newTab}" ajax="false" />
</h:form>

<h:form>
  <p:commandButton value="this wll cause NPE" action="#{pageBean.action}"/>
</h:form>

单击第一个按钮,返回上一个选项卡,单击第二个按钮。再次创建PageBean,所有数据都将丢失。这两个bean都是ViewScoped。

2 个答案:

答案 0 :(得分:2)

实际上,返回String导航案例结果会导致初始标签/窗口中的视图范围内的bean被杀死。您希望返回nullvoid以保持活着状态。根据您在其他问题中显示的newTab()代码,您需要通过Faces#redirect()调用替换导航案例(假设您确实OmniFaces使用了{{3}} {{3}} 1}})。您只需要事先将Faces#setFlashAttribute()设置为Flash#setRedirect(),以指示Flash范围将发生重定向。

true

答案 1 :(得分:1)

只有在您回发到同一视图时,

ViewScope bean才会生效。

如果您回传到action数据中的其他视图,将会丢失,因为将重新创建ViewScope bean。