从一个行动在我的豆,我试图重定向到另一个网页期待一个图参数。有什么推荐的方式来做到这一JSF2?

E.g., 说我源网页是:http://localhost/page1.xhtml

它有一个命令按钮,呼吁行动:

<h:commandButton value="submit" action="#{myBean.submit}" />

在那里我的豆看起来像:

@ManagedBean
@RequestScoped
public class MyBean {

private int id;

public String submit() {
    //Does stuff
    id = setID();
    return "success";
}

现在,我想的"提交"行动的返回导航 http://localhost/page2.xhtml?id=2

我已经试图这样做与一种看-param在我的导航情况,但奇怪的结果。脸-config段如下:

<navigation-rule>
    <from-view-id>/page1.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>success</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>

怪异的行为,即使myBean被设定要求的范围,它只呼吁myBean.getId()我第一次载入我的应用程序,并重新使用同样价值的所有后续调,产生错误的观的参数page2.

所以我在寻找一个更好的方式来做到这一点,或一个原因/解为什么看-param不是被要求从我的豆每次。

有帮助吗?

解决方案

有关JSF传递参数直观的事情是,你不决定发送什么(在动作),而是希望接收(在目标页面)的东西。

在做到这一点与重定向端部,目标页面元数据被加载和所有必需的参数被读出,附加到URL作为PARAMS的动作。

请注意,这是完全一样的机制与任何其他JSF绑定:你不能从一个地方阅读的inputText的值,并将它写在其他地方。在viewParam定义的值表达既用于(前的重定向)读取和(后重定向)写入。

通过您的豆你只是做:

@ManagedBean
@RequestScoped
public class MyBean {

private int id;

public String submit() {
    //Does stuff
    id = setID();
    return "success?faces-redirect=true&includeViewParams=true";
}

// setter and getter for id

如果接收侧具有:

    <f:metadata>
        <f:viewParam name="id" value="#{myBean.id}" />
    </f:metadata>

这将不正是你想要的。

其他提示

如果没有更好的解决办法,我发现工作是简单地建立我的查询字符串中的豆回报:

public String submit() {
    // Do something
    return "/page2.xhtml?faces-redirect=true&id=" + id;
}

这不是最灵活的解决方案,但似乎工作,我怎么想。

同样使用这种方法来清理构建查询串的处理: http://www.warski.org/blog/?p=185

查看这些:

你会需要的东西,如:

<h:link outcome="success">
  <f:param name="foo" value="bar"/>
</h:link>

...和...

<f:metadata>
  <f:viewParam name="foo" value="#{bean.foo}"/>
</f:metadata>

从判断 这页, ,这样可能比较容易:

 <managed-bean>
   <managed-bean-name>blog</managed-bean-name>
   <managed-bean-class>com.acme.Blog</managed-bean-class>
   <managed-property>
      <property-name>entryId</property-name>
      <value>#{param['id']}</value>
   </managed-property>
 </managed-bean>

您可以使用Primefaces这个样子做:

<p:button 
      outcome="/page2.xhtml?faces-redirect=true&amp;id=#{myBean.id}">
</p:button>

只需添加看出属性重定向代码如下:

<redirect include-view-params="true">
    <view-param>
        <name>id</name>
        <value>#{myBean.id}</value>
    </view-param>
</redirect>

这里是几个导航例子。

不参考的溶液到一个Bean:

<h:button value="login" 
        outcome="content/configuration.xhtml?i=1" />

在我的项目,我需要这样的方法:

<h:commandButton value="login" 
        action="content/configuration.xhtml?faces-redirect=true&amp;i=1"  />
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top