我正在阅读Balusc blog on PRG pattern in JSF,其中提到:
本文针对JSF 1.2。对于JSF 2.0,这可以更容易 使用新的Flash范围实现。
我想了解flash
范围如何帮助我们实现同样目标?
答案 0 :(得分:3)
在呈现响应阶段之前使用true
调用Flash#setKeepMessages()
以指示JSF将faces消息存储在闪存范围中,并将faces-redirect=true
查询字符串参数添加到结果中以执行重定向。 / p>
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";
}
这样就不需要一个阶段监听器从faces上下文收集faces消息,并在重定向之前将它们存储在会话中,并在第一个下一个请求中将它们从会话中删除,并在重定向后将它们重新添加到faces上下文中
闪光范围的工作方式大致相同。消息通过唯一标识符存储在会话中,该唯一标识符又作为响应中的cookie传递,并且那些消息(和cookie)已经从已经通过cookie的第一个下一个请求的会话中删除(这是毕竟,这是一个更强大的实现,尽管最终用户在同一时间完全同一会话上发送2个HTTP请求的机会很小 - 或者它必须是机器人。)