How to add request parameter in jsf2?

ⅰ亾dé卋堺 提交于 2019-12-13 03:20:29

问题


In my app, before upgrading to jsf 2, when doing a custom redirect I used to manually put a request parameter with a specific value in external context like this:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
                .put(CmwNavigationControllerBean.PARAM_DISPLAY_TARGET_POPUP, "true");

Now this line, throws an exception because it seems that this map is no longer allowed to be modified:

at java.util.Collections$UnmodifiableMap.put(Unknown Source) [rt.jar:1.7.0]

Isn't really no other way to bypass this exception? I'm doing refactoring because of upgrade and I try to keep the changes at minimal level.


回答1:


Rather than getRequestParameterMap() (which is read-only) you should invoke getRequestMap() on the ExternalContext.

For example:

FacesContext.getCurrentInstance()
            .getExternalContext()
            .getRequestMap()
            .put(CmwNavigationControllerBean.PARAM_DISPLAY_TARGET_POPUP, "true");



回答2:


You can either use a view parameter or use the flash scope for that. A view parameter is in practice a GET parameter which you can pass when you request the page you want to redirect to. For your case, you should redirect to it with the parameter appended.

Return the navigation case with the parameter appended:

//Will be reflected in browser's address bar as /context/myDestinationView.xhtml?displayTargetPopUp=true
return "myDestinationView?displayTargetPopUp=true&faces-redirect=true&includeViewParams=true";

Catch it from your destination view:

<f:viewParam name="displayTargetPopUp" value="#{displayTargetPopUp}" />

Another way if you want to avoid including it in your GET request, is to use flash scope, which is supposed to be fixed for Mojarra 2.1.27 and 2.2.5 versions. Flash scoped values are designed to support a redirection, while the request ones are not.

See also:

  • Understand Flash Scope in JSF2
  • How do you pass view parameters when navigating from an action in JSF2?


来源:https://stackoverflow.com/questions/21111649/how-to-add-request-parameter-in-jsf2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!