【发布时间】:2012-10-19 19:13:37
【问题描述】:
我正在阅读Balusc blog on PRG pattern in JSF,其中提到:
本文针对 JSF 1.2。对于 JSF 2.0,这可能更容易 使用新的 Flash 范围实现。
我想了解flash 范围如何帮助我们实现同样的目标?
【问题讨论】:
标签: http redirect post jsf-2 get
我正在阅读Balusc blog on PRG pattern in JSF,其中提到:
本文针对 JSF 1.2。对于 JSF 2.0,这可能更容易 使用新的 Flash 范围实现。
我想了解flash 范围如何帮助我们实现同样的目标?
【问题讨论】:
标签: http redirect post jsf-2 get
在渲染响应阶段之前使用true 调用Flash#setKeepMessages() 以指示JSF 将人脸消息存储在flash 范围内,并将faces-redirect=true 查询字符串参数添加到结果以执行重定向。
public String submit() {
// ...
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success!", null));
context.getExternalContext().getFlash().setKeepMessages(true);
return "nextpage?faces-redirect-true";
}
这样就不需要一个阶段侦听器,它从面孔上下文收集面孔消息并将它们存储在重定向之前的会话中,并在 firstnext 请求时将它们从会话中删除,并在重定向后将它们重新添加到面孔上下文中.
闪光灯瞄准镜的工作方式大致相同。消息通过唯一标识符存储在会话中,该标识符又作为 cookie 在响应中传递,并且这些消息(和 cookie)在第一个下一个请求中从会话中删除,该请求已将 cookie 传回(即,毕竟,这是一个更强大的实现,尽管最终用户在同一时间恰好在同一个会话上发送 2 个 HTTP 请求的可能性很小——或者它必须是一个机器人。
【讨论】: