【问题标题】:How can Flash scope help in implementing the PostRedirectGet (PRG) pattern in JSF2.0Flash 范围如何帮助在 JSF2.0 中实现 PostRedirectGet (PRG) 模式
【发布时间】: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


    【解决方案1】:

    在渲染响应阶段之前使用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 请求的可能性很小——或者它必须是一个机器人。

    【讨论】:

    • “firstnext”请求是什么意思?能详细点吗?
    • 当前响应完成后进入的第一个 HTTP 请求(在同一会话中)。如果是带有重定向的响应,您通常会假设它是重定向的请求本身。
    • 如果您很难理解 HTTP 请求、HTTP 响应和 HTTP 会话,那么您可能会发现这个答案很有帮助:stackoverflow.com/questions/3106452/…
    猜你喜欢
    • 2011-01-10
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多