在我的应用程序中,在升级到jsf 2之前,在进行自定义重定向时,我曾经手动将具有特定值的请求参数放在外部上下文中,如下所示:
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
.put(CmwNavigationControllerBean.PARAM_DISPLAY_TARGET_POPUP, "true");
现在这行引发了一个异常,因为似乎不再允许修改此地图:
at java.util.Collections$UnmodifiableMap.put(Unknown Source) [rt.jar:1.7.0]
是不是真的没有办法绕过这个例外?我正在进行重构,因为升级,我尝试将更改保持在最低水平。
答案 0 :(得分:2)
而不是getRequestParameterMap()(只读),您应该在ExternalContext
上调用getRequestMap()。
例如:
FacesContext.getCurrentInstance()
.getExternalContext()
.getRequestMap()
.put(CmwNavigationControllerBean.PARAM_DISPLAY_TARGET_POPUP, "true");
答案 1 :(得分:2)
您可以使用视图参数或使用闪存范围。视图参数实际上是一个GET参数,您可以在请求要重定向到的页面时传递该参数。对于您的情况,您应该使用附加的参数重定向到它。
返回附加参数的导航案例:
//Will be reflected in browser's address bar as /context/myDestinationView.xhtml?displayTargetPopUp=true
return "myDestinationView?displayTargetPopUp=true&faces-redirect=true&includeViewParams=true";
从目的地视图中抓取它:
<f:viewParam name="displayTargetPopUp" value="#{displayTargetPopUp}" />
如果你想避免在你的GET请求中包含它,另一种方法是使用闪存范围,这应该是为Mojarra 2.1.27和2.2.5版本修复的。 Flash范围值旨在支持重定向,而请求则不支持。
另见: