我想从一个页面导航到另一个页面,例如从page1
bean1
导航到page2
bean2
。我需要将一些参数从bean1
传递到bean2
。
我想了解如何在@ManagedProperty
的{{1}}部分中使用<f:viewParam>
参数和<f:metadata>
。比如说,page2
和field1
中有field2
,field3
和bean1
可用的getter和setter。我的理解是,我必须在bean2
:
喜欢
page2
我不确定在<f:metadata>
<f:viewParam name="field1" value="#{bean2.field1}"/>
<f:viewParam name="field2" value="#{bean2.field2}"/>
<f:viewParam name="field3" value="#{bean2.field3}"/>
</f:metadata>
或@ManagedProperty
中使用field1
注释来定义参数field2
,field3
和bean1
的位置}。
在bean2
我可以使用page1
我可以在我的一种方法中使用相同的方法代替"page2?faces-redirect=true&includeViewParams=true"
,比如对提交命令链接的响应吗?
如果我需要在page1
和page1
中同时包含这三个字段,我可以定义这些隐藏字段吗?
答案 0 :(得分:4)
您需要在<f:param>
<h:link>
中将其指定为page1.xhtml
。
<h:link value="Go to page2" outcome="page2">
<f:param name="field1" value="#{bean1.field1}" />
<f:param name="field2" value="#{bean1.field2}" />
<f:param name="field3" value="#{bean1.field3}" />
</h:link>
然后,您可以使用<f:viewParam>
(或@ManagedProperty
,但这允许不太精细的验证)在page2.xhtml
的bean中设置它们。
<f:metadata>
<f:viewParam name="field1" value="#{bean2.field1}" />
<f:viewParam name="field2" value="#{bean2.field2}" />
<f:viewParam name="field3" value="#{bean2.field3}" />
</f:metadata>
您不需要<h:commandLink>
在faces-redirect
和includeViewParam
发送POST请求。 <h:link>
只是一个简单的GET请求就简单得多,而且SEO更友好。