我有一个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。我希望我不能替换它或重构我的应用程序不使用它,因为我已经使用它映射了很多导航流程。有人知道这个场景有更好的选择吗? 我真的很感激任何建议。感谢。
答案 0 :(得分:1)
如果要部署到支持JSF 2.2的“现代”容器,我建议不要使用MultiPageMessagesSupport
。已经为JSF 1.x开发了MultiPageMessagesSupport
阶段监听器。 JSF 2.x增加了对重定向中持久化消息的支持。只需在重定向之前执行此代码:
FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);