Navigation 在jsf-2.2的faces配置中传递重定向参数

Navigation 在jsf-2.2的faces配置中传递重定向参数,navigation,jsf-2.2,glassfish-4,mojarra,faces-config,Navigation,Jsf 2.2,Glassfish 4,Mojarra,Faces Config,在旧的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> <

在旧的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?id=0
page1时,将打开
page1.xhtml?id=1
导航到
page2
,参数为
id=1

导航到
page2.xhtml?id=1
和参数是必需的,因为在
page2
中,在
PostConstruct
上读取参数,并且需要根据该id查找对象


在faces-config.xml文件中使用jsf 2.2和mojarra javax.faces-2.2.8实现时,没有
存在
更改它们不会给出一个成功的场景:导航没有id,它将导航到
page2.xhtml
,而不是
page2.xhtml?id=1
您可以用老方法来做。不要使用
而是使用
。xsd()会将其标记为false,但mojarrajavax.faces-2.2.8会按照您想要的方式默默地使用它

编辑:XSD将在Mojarra 2.3版本中修复,请参阅其他“答案”

例如:


...
福
酒吧

尝试在
faces config.xml
元素中使用
include view params=“true”
属性,而不是使用
标记声明参数。
还要确保在目标页面(
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>
<f:metadata>
    <f:viewParam id="id" name="id" value="#{myBean.id}" />
    <f:viewAction action="#{myBean.init()}"/>
</f:metadata>
<f:metadata>
    <f:viewParam id="id" name="id"/>
</f:metadata>
public class MyBean {
    private double id;

    public boolean init(){
        if(id > 0)
            return true;
        else
            return false;
    }

    // getter & setter for id
}
在配置上使用旧的
标记,如上所述的Jaxt0r

这是JSF上的一个bug,已在2.3版中修复。看

<f:metadata>
    <f:viewParam id="id" name="id"/>
</f:metadata>
public class MyBean {
    private double id;

    public boolean init(){
        if(id > 0)
            return true;
        else
            return false;
    }

    // getter & setter for id
}