首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jsf-2.2的faces-config中传递redirect-param

在jsf-2.2的faces-config中传递redirect-param
EN

Stack Overflow用户
提问于 2014-11-26 20:54:13
回答 3查看 3.5K关注 0票数 4

在旧的jsf中,以下代码是有效的

代码语言:javascript
复制
<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代码:

代码语言:javascript
复制
<f:metadata>
    <f:viewParam id="id" name="id" value="#{myBean.id}"  />
    <f:viewAction action="#{myBean.init()}"/>
</f:metadata>

Java代码:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

发布于 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版本中修复,请参阅另一个“答案”

示例:

代码语言:javascript
复制
<?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>
票数 3
EN

Stack Overflow用户

发布于 2017-03-09 14:49:21

尝试在faces-config.xml<redirect>元素中使用include-view-params="true"属性,而不是使用<view-param>标记声明参数。

还要确保在目标页面(page2.xhtml)中声明<f:viewParam>

我相信我已经让你的例子像你预期的那样工作了:

faces-config.xml中的导航规则:

代码语言:javascript
复制
<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代码(未更改):

代码语言:javascript
复制
<f:metadata>
    <f:viewParam id="id" name="id" value="#{myBean.id}" />
    <f:viewAction action="#{myBean.init()}"/>
</f:metadata>

页面2.xhtml代码:

代码语言:javascript
复制
<f:metadata>
    <f:viewParam id="id" name="id"/>
</f:metadata>

ManagedBean (未更改):

代码语言:javascript
复制
public class MyBean {
    private double id;

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

    // getter & setter for id
}
票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27149787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档