将一个param从ManagedBean传递给jsf页面

时间:2015-04-07 20:47:30

标签: jsf jsf-2 jsf-2.2

我正在使用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,但是param object_id是0.我添加了println以显示object_id,它是实际的密钥。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

由于您在Managed Bean上使用唯一的@ManagedBean注释并且未明确指定任何Bean的范围,因此Bean将像@RequestScoped bean一样。[参见{{3} }

因此,每次单击New Object按钮时,Bean都会重新初始化,您将失去状态(变量值)。

思考并决定要使用的范围[见link] 。根据您的要求,@ViewScoped可能会为您完成工作。