如何使用请求参数导航?

时间:2012-03-20 00:15:34

标签: jsf-2 viewparams

我想从一个页面导航到另一个页面,例如从page1 bean1导航到page2 bean2。我需要将一些参数从bean1传递到bean2

我想了解如何在@ManagedProperty的{​​{1}}部分中使用<f:viewParam>参数和<f:metadata>。比如说,page2field1中有field2field3bean1可用的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注释来定义参数field2field3bean1的位置}。

bean2我可以使用page1

我可以在我的一种方法中使用相同的方法代替"page2?faces-redirect=true&amp;includeViewParams=true",比如对提交命令链接的响应吗?

如果我需要在page1page1中同时包含这三个字段,我可以定义这些隐藏字段吗?

1 个答案:

答案 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-redirectincludeViewParam发送POST请求。 <h:link>只是一个简单的GET请求就简单得多,而且SEO更友好。

另见: