Flash范围如何帮助在JSF2.0中实现Post Redirect Get(PRG)模式

时间:2012-10-30 12:37:33

标签: http redirect post jsf-2 get

我正在阅读Balusc blog on PRG pattern in JSF,其中提到:

  

本文针对JSF 1.2。对于JSF 2.0,这可以更容易   使用新的Flash范围实现。

我想了解flash范围如何帮助我们实现同样目标?

1 个答案:

答案 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请求的机会很小 - 或者它必须是机器人。)