我有以下导航规则:
<navigation-rule>
<from-view-id>/pages/*</from-view-id>
<navigation-case>
<from-outcome>test</from-outcome>
<to-view-id>/pages/test/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
TestMB:
public String test() {
return "test?id=1";
}
和test.xhtml:
<h:commandLink action="#{testMB.test}">click</h:commandLink>
但如果return "test?id=1";
它无效。我不想使用return "/pages/test/edit.xhtml?id=1";
,我想使用抽象名称test
。
答案 0 :(得分:5)
如果您要在网址中添加GET参数,请知道您无法使用<navigation-case>
(在您的示例中为test
)。如果你有一个特定的URL /页面,唯一可行的方法是:
public String test() {
return "edit.xhtml?id=1&faces-redirect=true";
}
重定向+参数机制仅适用于指向的明确页面/ URL。它与JSF提供的navigation-case
机制不兼容。
如果由于某种原因,您需要导航案例为导航模式,则需要在faces-config文件中定义导航参数:
<to-view-id>/pages/test/edit.xhtml</to-view-id>
<redirect>
<view-param>
<name>id</name>
<value>1</value>
</view-param>
</redirect>
redirect
标记用于指定faces-redirect
参数以及您所需的GET参数id
。
更好的形式是你不是对价值进行硬编码,而是通过价值绑定使其变得动态:
<redirect>
<view-param>
<name>id</name>
<value>#{yourBean.redirectValue}</value>
</view-param>
</redirect>