更改之前在faces-config.xml中初始化的bean

时间:2011-03-03 10:16:28

标签: java jsf faces-config

public class MyBean {
    private Integer [] myField;


    public Integer [] getMyField() {
        return myField;
    }
    public void setMyField(Integer [] myField) {
        this.myField = myField;
    }

我以这种方式在faces-config.xml中初始化这个相同的bean

<managed-bean-name>myBean</managed-bean-name>
        <managed-bean-class>com.path.bean.MyBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>myField</property-name>
            <list-entries>
                    <value>6</value>
                    <value>12</value>
                    <value>24</value>       
            </list-entries>
        </managed-property>        
    </managed-bean>

然后,在应用程序中我想要更改这些值。要做到这一点:

        MyBean myBean = new MyBean();
        Integer [] results = myBean.getMyfield();
        //Change the value of this array
        visualizationBean.setResultsPerPage(results);

但这是不可能的,Integer [] results = myBean.getMyfield()给了我一个null。无论如何,在我的应用程序的界面中,我可以看到bean正确初始化,因为它保存了值6,12和24. 任何形式的帮助? 提前致谢

2 个答案:

答案 0 :(得分:3)

当您使用MyBean实例化new时,它不会查找Faces-Config。它只是使用构造函数创建一个对象。

如果在使用

初始化上下文时使用jsf2.0 make bean进行初始化
@ManagedBean(eager=true)

并从范围映射中检索Bean实例。如果它的应用程序作用域为。

MyBean mb = (MyBean)FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get("beanName");

<强>更新

您的托管bean应该是,

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(eager="true")
@RequestScoped
public class MyBean {

如果您只想在另一个bean中使用bean,那么BalusC建议只需注入它并获取填充值,而不使用new

例如:如果您希望MyBean填充SomeOtherBean,那么

@ManagedBean()
@RequestScoped
public class SomeOtherBean {
   @ManagedProperty(value="#{myBean}") 
   private MyBean myBean;
   //getters & setters of myBean

<强>更新

对于jsf 1.2,没有注释,您需要配置faces-config.xml,如下所示

<managed-bean>
    <managed-bean-name>myBean</managed-bean-name>
    <managed-bean-class>com.example.my.MyBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
    <managed-bean-name>someAnotherBean</managed-bean-name>
    <managed-bean-class>com.example.some.AnotherBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>myBean</property-name>
        <value>#{myBean}</value>
    </managed-property>
</managed-bean>

答案 1 :(得分:1)

您正在使用MyBean myBean = new MyBean();

之类的新内容创建对象

所以你肯定会得到null。