7

我有一个简单的 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。我使用来自这个主题JSF 2 和 Post/Redirect/Get?的 BalusC 技巧。

4

1 回答 1

13

至于第一个问题:您可以添加includeViewParams=true到导航案例结果中。但是,当您在方法中执行此操作时,您永远无法保证您会成功地被重定向preRenderView。那时可能已经太晚了。

至于第二个问题:你可以设置to的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>
于 2011-08-31T13:15:26.263 回答