如何在jsf2中添加请求参数?

时间:2014-01-14 10:49:12

标签: java jsf-2 jsf-1.2

在我的应用程序中,在升级到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]

是不是真的没有办法绕过这个例外?我正在进行重构,因为升级,我尝试将更改保持在最低水平。

2 个答案:

答案 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范围值旨在支持重定向,而请求则不支持。

另见: