1
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。
有什么帮助吗?提前致谢

4

2 回答 2

3

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

如果您在使用jsf2.0初始化上下文时使用 make bean 进行初始化

@ManagedBean(eager=true)

Bean并从范围映射中检索实例。如果它的应用范围为 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>
于 2011-03-03T10:24:40.157 回答
1

您正在使用 new like 创建对象MyBean myBean = new MyBean();

所以你肯定会得到空值。

于 2011-03-03T10:26:12.917 回答