我有一个简单的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
因为在@PostConstruct
中设置了param1。
另一个问题-我在页面上有链接引用相同的视图:
<h:link value="clickme">
<f:param name="param3" value="otherValue"/>
</h:link>
当用户进入?param1=someValue
页面并点击链接时,被重定向到?param3=otherValue
,但我想重定向到?param1=someValue¶m3=otherValue
。我知道我可以在<h:link>
中添加更多的参数但是很难在每个<h:link>
中添加所有可能的参数
p。我使用了本主题中的BalusC技巧JSF 2和Post/Redirect/Get?
关于第一个问题:您可以将includeViewParams=true
添加到导航用例结果中。但是,当您在preRenderView
方法中这样做时,您永远无法保证您将成功地重定向。到那时可能已经太晚了。
关于第二个问题:可以将<h:link>
的includeViewParams
属性设置为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>