【问题标题】:Pass a param from ManagedBean to jsf page将参数从 ManagedBean 传递到 jsf 页面
【发布时间】:2015-04-07 20:47:30
【问题描述】:

我正在使用 JSF 2.2 和 Tomcat 8,我刚刚开始使用它们。

我在 jsf 页面中有一个命令按钮。

<h:commandButton id="newObject" value="New Object" action="#{someObject.someAction}">
<f:param name="object_id" value="#{someObject.object_id}" />
</h:commandButton>

ManagedBean 与此类似:

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class SomeObject implements Serializable{
    private static final long serialVersionUID = 1L;
    private int object_id;
    public int getObject_id() {
        return object_id;
    }
    public void setObject_id(int object_id) {
        this.object_id = object_id;
    }
    public String someAction() {
        setObject_id(sqlInsert());
        if(getObject_id() != 0) {
            System.out.println(getObject_id());
            return "new_page";
        }
    }
}

sqlInsert 方法工作正常。我用它在某个 sql 表中插入一个新行并获取自动生成的键,它是一个 int。如果插入没有发生,它将返回 0。

我可以导航到 new_page,但参数 object_id 为 0。我添加了 println 以显示 object_id,它是实际的键。

我做错了什么?

【问题讨论】:

  • 除了您误解了JSF 中有关通信的一些基本概念之外,您为什么要将bean 的objectId 传回给它自己?在此处显示的代码中,您实际上是否将 objectId 的值设置为 0 以外的值?
  • 在 jsf 页面中,我没有设置 objectId,因为它在数据库中还不存在。 sqlInsert 方法正在创建对象,这就是我在那里设置 objectID 的原因。并且正在返回数据库的正确种子,但在新页面中我得到 0 作为 objectID。
  • 我的猜测是有些地方出了问题,@jaec86。其中之一是您没有在 ManagedBean 上声明范围,默认值为 RequestScoped,这意味着它会在 每个 HTTP 请求上重新创建。我建议您从 Bauke Scholtz's JSF link index 开始,而不是先在 StackOverflow 上发布问题。
  • 您应该在您尝试检索请求参数的目标页面中发布您的代码部分。您尝试检索参数的如何在哪里很重要
  • 您提供了伪代码,如果不进行一些疯狂的猜测,很难合理地回答。这句话,“我可以导航到new_page,但参数object_id是0。我添加println()来显示object_id,它是实际的关键。”严重矛盾使用目前难以猜测的托管 bean 代码 sn-p。它试图暗示 &lt;f:param&gt; 提供零,但在托管 bean 中,您以某种方式获得非零键值。由于某些不确定的原因,&lt;f:param&gt; 可能未正确设置为托管 bean 中的 object_id

标签: jsf jsf-2 jsf-2.2


【解决方案1】:

由于您在托管 Bean 上使用了唯一的 @ManagedBean 注释并且没有明确指定 bean 的任何范围,因此您的 Bean 将像 @RequestScoped bean 一样运行。[参见 link]

所以每次点击New Object 按钮时,Bean 都会重新初始化,并且您将失去状态(变量值)。

考虑并决定要使用哪个范围 [参见link]。对于您的要求,@ViewScoped 可能会为您完成这项工作。

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多