在旧的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 page1,同时使用参数id=1导航到page2。
需要使用参数导航到page2.xhtml?id=1,因为在PostConstruct或<f:viewAction>上的page2中读取了参数,并需要根据此id查找对象
将jsf2.2与mojarra javax.faces-2.2.8实现结合使用在faces-config.xml文件中没有<view-param>,没有<redirect-param>更改它们不会给出任何成功的方案没有id导航将导航到page2.xhtml而不是page2.xhtml?id=1
发布于 2016-01-14 01:36:19
你可以用老方法来做。使用<view-param>而不是<redirect-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版本中修复,请参阅另一个“答案”
示例:
<?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>发布于 2017-03-09 14:49:21
尝试在faces-config.xml的<redirect>元素中使用include-view-params="true"属性,而不是使用<view-param>标记声明参数。
还要确保在目标页面(page2.xhtml)中声明<f:viewParam>。
我相信我已经让你的例子像你预期的那样工作了:
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>页面2.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
}发布于 2017-04-11 00:18:37
在配置上使用旧的<view-param>标记,就像Jaxt0r在https://stackoverflow.com/a/34773335/2521247上提到的那样
这是JSF上的一个错误,已在2.3版本中修复。请参阅https://github.com/eclipse-ee4j/mojarra/issues/3403
https://stackoverflow.com/questions/27149787
复制相似问题