在提交响应后无法创建会话 - Glassfish 4上的Pretty Faces MultiPageMes​​sagesSupport

时间:2013-06-22 00:02:36

标签: jsf-2 prettyfaces glassfish-4

我有一个Java EE应用程序,我使用JSF2 + PrettyFaces + EBJ3 + Glassfish

我刚刚更新到Glassfish4,它是Java EE 7的默认服务器实现,我开始遇到PrettyFaces的问题。

我在faces-config.xml上配置了

<lifecycle>
  <phase-listener>com.ocpsoft.pretty.faces.event.MultiPageMessagesSupport</phase-listener>
</lifecycle>     

使Faces消息能够正确传递并显示在屏幕上。

但是自从我从Glassfish3升级到4后,我开始遇到这个问题:

java.lang.IllegalStateException:无法在响应之后创建会话 一直致力于 ...

        at com.ocpsoft.pretty.faces.util.FacesMessagesUtils.saveMessages(FacesMe
ssagesUtils.java:56)
        at com.ocpsoft.pretty.faces.event.MultiPageMessagesSupport.afterPhase(Mu
ltiPageMessagesSupport.java:66)

如果我从faces-config.xml中删除了侦听器,则屏幕上不会显示任何Faces消息。

我正在使用PrettyFaces来获得格式良好的URL以增强我网站上的SEO。我希望我不能替换它或重构我的应用程序不使用它,因为我已经使用它映射了很多导航流程。有人知道这个场景有更好的选择吗? 我真的很感激任何建议。感谢。

1 个答案:

答案 0 :(得分:1)

如果要部署到支持JSF 2.2的“现代”容器,我建议不要使用MultiPageMessagesSupport。已经为JSF 1.x开发了MultiPageMessagesSupport阶段监听器。 JSF 2.x增加了对重定向中持久化消息的支持。只需在重定向之前执行此代码:

FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);