在旧的jsf中,以下代码正在运行
<navigation-rule>
<from-view-id>/page1.xhtml</from-view-id>
<navigation-case>
<from-outcome>true</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
<redirect>
<view-param>
<name>id</name>
<value>#{myBean.id}</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
page1.xhtml代码:
<f:metadata>
<f:viewParam id="id" name="id" value="#{myBean.id}" />
<f:viewAction action="#{myBean.init()}"/>
</f:metadata>
Java代码:
public class MyBean(){
private double id;
public boolean init(){
if(id > 0)
return true;
else
return false;
}
}
在成功案例中,page1.xhtml?id=0
第1页将在page1.xhtml?id=1
导航至page2
且参数id=1
时打开。
需要使用参数导航到page2.xhtml?id=1
,因为page2
上的PostConstruct
或<f:viewAction>
参数被读取并且需要根据此ID找到对象
在faces-config.xml文件中使用jsf 2.2和mojarra javax.faces-2.2.8实现没有<view-param>
有<redirect-param>
更改它们没有给出导航没有id的成功场景它会导航到page2.xhtml
而不是page2.xhtml?id=1
答案 0 :(得分:3)
你可以用旧的方式做到这一点。而不是使用<redirect-param>
使用<view-param>
。 xsd(http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd)会将其标记为false,但是mojarra javax.faces-2.2.8将以您想要的正确方式默默使用它。
编辑:XSD将在Mojarra 2.3版本中修复,请参阅其他答案&#39;
示例:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2">
<navigation-rule>
<navigation-case>
...
<redirect>
<view-param>
<name>foo</name>
<value>bar</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
</faces-config>
答案 1 :(得分:0)
尝试使用include-view-params="true"
元素的<redirect>
元素中的faces-config.xml
属性,而不是使用<view-param>
标记声明参数。
另外,请务必在目标网页(<f:viewParam>
)中声明page2.xhtml
我相信我让你的榜样像你期望的那样工作:
faces-config.xml中的导航规则:
<navigation-rule>
<from-view-id>/page1.xhtml</from-view-id>
<navigation-case>
<from-outcome>true</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
<redirect include-view-params="true" />
</navigation-case>
</navigation-rule>
page1.xhtml代码(未更改):
<f:metadata>
<f:viewParam id="id" name="id" value="#{myBean.id}" />
<f:viewAction action="#{myBean.init()}"/>
</f:metadata>
page2.xhtml代码:
<f:metadata>
<f:viewParam id="id" name="id"/>
</f:metadata>
ManagedBean(未更改):
public class MyBean {
private double id;
public boolean init(){
if(id > 0)
return true;
else
return false;
}
// getter & setter for id
}
答案 2 :(得分:0)
在配置上使用旧<view-param>
标记,如https://stackoverflow.com/a/34773335/2521247上提到的Jaxt0r
这是针对2.3修复的JSF错误。见https://java.net/jira/browse/JAVASERVERFACES-3399