0

我有一个 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。我希望我不必替换它或重构我的应用程序以不使用它,因为我已经使用它映射了很多导航流。有人知道这种情况的更好选择吗?我真的很感激任何建议。谢谢。

4

1 回答 1

1

MultiPageMessagesSupport如果您要部署到具有 JSF 2.2 支持的“现代”容器,我不建议使用。MultiPageMessagesSupport相位监听器是为 JSF 1.x 开发的。JSF 2.x 添加了对跨重定向消息持久化的支持。只需在重定向之前执行此代码:

FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
于 2013-06-23T15:49:45.433 回答