Автоматически включать параметры просмотра в URL - PullRequest
7 голосов
/ 31 августа 2011

У меня есть простая страница jsf с параметрами просмотра и методом загрузки, который обрабатывает эти параметры:

<f:metadata>
 <f:viewParam name="param1" value="#{bean.param1}"/>
 <f:viewParam name="param2" value="#{bean.param2}"/>
 <f:viewParam name="param3" value="#{bean.param3}"/>
 <f:event type="preRenderView" listener="#{bean.load()}"/>
</f:metadata>

Я также установил некоторые начальные значения в @PostConstruct. Как перенаправить пользователя в новое местоположение, включающее эти параметры (которые не являются нулевыми). Например, пользователь вводит в браузере:

domain.com/page.jsf

и перенаправляется на:

domain.com/page.jsf?param1=valueA

потому что param1 был установлен в @PostConstruct.

Другой вопрос - у меня есть ссылки на страницу, ссылающуюся на тот же вид:

<h:link value="clickme">
 <f:param name="param3" value="otherValue"/>
</h:link>

Когда пользователь заходит на страницу с ?param1=someValue и щелкает ссылку, он перенаправляется на ?param3=otherValue, но я хочу перенаправить на ?param1=someValue&param3=otherValue. Я знаю, что могу добавить больше параметров в <h:link>, но трудно добавлять все возможные параметры в каждый <h:link>

PS. Я использую подсказку BalusC из этой темы JSF 2 и Post / Redirect / Get?

1 Ответ

12 голосов
/ 31 августа 2011

Что касается 1-го вопроса: вы можете добавить includeViewParams=true к результату навигации. Но вы никогда не сможете гарантировать, что вы будете успешно перенаправлены, пока вы делаете это внутри preRenderView метода. Тогда может быть уже слишком поздно.

Что касается второго вопроса: вы можете установить атрибут includeViewParams для <h:link> на true.

<h:link value="clickme" includeViewParams="true">
    <f:param name="param3" value="otherValue"/>
</h:link>

Кроме того, вы также можете добавить includeViewParams=true к результату.

<h:link value="clickme" outcome="otherPage?includeViewParams=true">
    <f:param name="param3" value="otherValue"/>
</h:link>
...