我一直在为JSF2.0中的Flash-scope (我知道它不像其他的“作用域”,但经常被称为“作用域”)而苦苦挣扎。(Mojarra)
我的问题是,flash-cookie绑定到视图的路径,将对象放入flash。
这会导致对象在重定向到同一应用程序中的不同路径后不可用。我们需要在重定向导航的另一侧提供字符串(可能还有对象)。
我已经实现了一个@WebFilter,它的目的是覆盖它,并用下面的包装器替换ServletResponse。
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首先要绑定到视图的路径。
发布于 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作用域,可以像这样获取对它的引用:
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();放在下面:
flash.put("myObject", myObject);要获得以下信息:
Object myObject = flash.get("myObject");你的黑客攻击会导致JSF出现问题吗?我可以肯定地说,如果现在不是,那么以后当你尝试升级Mojarra时,使用不同的容器,或者切换到MyFaces。
发布于 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 (如果适用的话)?
https://stackoverflow.com/questions/11410161
复制相似问题