2014-01-14 5 views
0

В моем приложении, перед обновлением до JSF 2, при выполнении пользовательского перенаправлять я вручную поставить параметр запроса с определенным значением во внешнем контексте, как это:Как добавить параметр запроса в jsf2?

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

Теперь эта линия, бросает исключение, потому что кажется, что эта карта больше не разрешается изменять:

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

На самом деле, нет другого способа обойти это исключение? Я делаю рефакторинг из-за обновления, и я стараюсь сохранять изменения на минимальном уровне.

ответ

1

Вместо getRequestParameterMap() (который доступен только для чтения) вы должны вызывать getRequestMap() на ExternalContext.

Например:

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

Я пробовал так, но мне кажется, что сразу же после того, как положить, он имеет нулевое значение, проверяется, как 'вернуть FacesContext.getCurrentInstance () .getExternalContext(). getRequestParameterMap(). get (CmwNavigationControllerBean.PARAM_DISPLAY_TARGET_POPUP); ' –

+0

Нет, у меня нет ... –

1

Вы можете использовать параметр просмотра или использовать флэш-возможности для этого. Параметр вида на практике представляет собой параметр 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. Значения с флэш-памятью предназначены для поддержки перенаправления, а запросы - нет.

Смотрите также: