首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF 2.0 Flash-scope - cookie路径

JSF 2.0 Flash-scope - cookie路径
EN

Stack Overflow用户
提问于 2012-07-10 17:15:43
回答 2查看 3.1K关注 0票数 1

我一直在为JSF2.0中的Flash-scope (我知道它不像其他的“作用域”,但经常被称为“作用域”)而苦苦挣扎。(Mojarra)

我的问题是,flash-cookie绑定到视图的路径,将对象放入flash。

这会导致对象在重定向到同一应用程序中的不同路径后不可用。我们需要在重定向导航的另一侧提供字符串(可能还有对象)。

我已经实现了一个@WebFilter,它的目的是覆盖它,并用下面的包装器替换ServletResponse

代码语言:javascript
复制
private class ResponseWrapper extends HttpServletResponseWrapper{

    private final String path;

    public ResponseWrapper(HttpServletResponse response, String contextpath) {
        super(response);
        this.path = contextpath;
    }

    @Override
    public void addCookie(Cookie cookie) {

        // Hardcoded name from jsf-impl # com.sun.faces.context.flash.ELFlash  
        final String FLASH_COOKIE_NAME = "csfcfc";

        if (cookie.getName().equals(FLASH_COOKIE_NAME)){
            cookie.setPath(path);
        }
        super.addCookie(cookie);
    }

}

实际上,此包装器将修改flash-cookie以将其绑定到应用程序上下文根。

我的问题是,这是否会导致我没有监督的其他问题。

我不能理解为什么Flash首先要绑定到视图的路径。

EN

回答 2

Stack Overflow用户

发布于 2012-07-19 23:40:25

你的一个假设是错误的:

是将flash-cookie绑定到视图的路径,将对象放入flash中。

事实证明,Flash作用域通过了重定向,只有一次。

换句话说,放在Flash作用域中的对象将在重定向中幸存下来。http://mkblog.exadel.com/2010/07/learning-jsf2-using-flash-scope/

如果你在摆弄cookie和过滤器,你可能做错了什么。JSF将这些概念抽象出来,因此您可以只使用POJO来完成您的工作。不要弄乱Java EE cookie,您将做比您需要做的更多的工作,并且您会立即创建非常脆弱的代码。

要使用flash作用域,可以像这样获取对它的引用:

代码语言:javascript
复制
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();

放在下面:

代码语言:javascript
复制
flash.put("myObject", myObject);

要获得以下信息:

代码语言:javascript
复制
Object myObject = flash.get("myObject");

你的黑客攻击会导致JSF出现问题吗?我可以肯定地说,如果现在不是,那么以后当你尝试升级Mojarra时,使用不同的容器,或者切换到MyFaces。

票数 2
EN

Stack Overflow用户

发布于 2012-07-19 01:41:40

这并没有真正回答你的问题,但是看看这些问题和笔记-- After post is setting a value in JSF2 flash scope, it is visible again on second GET request to a page (Flash scope considered harmful)

也许你应该使用RenderScoped (如果适用的话)?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11410161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档