Arrays jsf从数组nullpointerexception下拉列表

Arrays jsf从数组nullpointerexception下拉列表,arrays,jsf,selectonemenu,Arrays,Jsf,Selectonemenu,我试图从数组中创建下拉菜单,但我总是得到nullPointerException/。我什么都试过了: -在setter上,我使用数据创建数组 -在getter上,如果数组为null,则调用setter -在getter上,我尝试创建新的数组对象并用setter填充它 -尝试使用ajax执行下拉列表,然后使用 这些都不是问题:我今天必须这么做,所以现在我只是硬编码下拉列表,但我想知道我哪里出错了:/ 以下是第页的下拉代码: <h:selectOneMenu id="dataRejestrac

我试图从数组中创建下拉菜单,但我总是得到nullPointerException/。我什么都试过了: -在setter上,我使用数据创建数组 -在getter上,如果数组为null,则调用setter -在getter上,我尝试创建新的数组对象并用setter填充它 -尝试使用ajax执行下拉列表,然后使用

这些都不是问题:我今天必须这么做,所以现在我只是硬编码下拉列表,但我想知道我哪里出错了:/

以下是第页的下拉代码:

<h:selectOneMenu id="dataRejestracjiMiesiac" value="#{searchBean.dataRejMiesiac}">
<f:selectItems value="#{searchBean.listaMiesiecy}" var="m" itemLabel="#{m.miesiac}" itemValue="#{m.miesiacID}"/>
</h:selectOneMenu>
我在数组的下一个下拉列表中遇到了同样的问题——天,这是月


提前感谢您的帮助:)

您不应该在setter方法中填充列表。事实上,对于非输入组件,永远不会调用setter方法。
仅输出,从不调用其setter。只有当JSF需要用提交的值更新模型值时,才会为输入组件调用setter。例如,
本身的值

相反,您应该在构造函数中预填充模型,或者更好地在bean的
@PostConstruct
注释方法中预填充模型

例如

一般规则是:不要在getter中放入
返回属性以外的任何内容
和setter中,然后
this.property=property。您应该在(post)构造函数或(action)侦听器方法中执行业务逻辑。如果在
事件期间需要根据另一个值填充
,请改用

顺便说一句,如果
是硬编码的,那么您还可以将属性放在单独的应用程序范围bean中的值后面,这样它在应用程序的生命周期内只创建一次,而不是在每个HTTP请求上重复创建

另见:

非常感谢您的帮助和解释:)在接下来的几天里,它将对项目非常有用:)再次感谢:)不客气。你也看到维基页面了吗?它包含了更多关于使用
的提示。是的,我简单地阅读了它,但很可能很快就会回到它的另一个问题:PGreat。祝你好运。
protected Miesiac[] listaMiesiecy = new Miesiac[12];

public void setListaMiesiecy() {
        this.listaMiesiecy[0] = new Miesiac(1, "Styczen", 31);
        this.listaMiesiecy[1] = new Miesiac(2, "Luty", 28);
        this.listaMiesiecy[2] = new Miesiac(3, "Marzec", 31);
        this.listaMiesiecy[3] = new Miesiac(4, "Kwiecień", 30);
        this.listaMiesiecy[4] = new Miesiac(5, "Maj", 31);
        this.listaMiesiecy[5] = new Miesiac(6, "Czerwiec", 30);
        this.listaMiesiecy[6] = new Miesiac(7, "Lipiec", 31);
        this.listaMiesiecy[7] = new Miesiac(8, "Sierpień", 31);
        this.listaMiesiecy[8] = new Miesiac(9, "Wrzesień", 30);
        this.listaMiesiecy[9] = new Miesiac(10, "Październik", 31);
        this.listaMiesiecy[10] = new Miesiac(11, "Listopad", 30);
        this.listaMiesiecy[11] = new Miesiac(12, "Grudzień", 31);
    }
public Miesiac[] getListaMiesiecy(){
    listaMiesiecy = new Miesiac[12];
    return this.listaMiesiecy;
}
public class Bean {

    private Miesiac[] listaMiesiecy;

    @PostConstruct
    public void init() {
        this.listaMiesiecy = new Miesiac[12];
        this.listaMiesiecy[0] = new Miesiac(1, "Styczen", 31);
        this.listaMiesiecy[1] = new Miesiac(2, "Luty", 28);
        this.listaMiesiecy[2] = new Miesiac(3, "Marzec", 31);
        this.listaMiesiecy[3] = new Miesiac(4, "Kwiecień", 30);
        this.listaMiesiecy[4] = new Miesiac(5, "Maj", 31);
        this.listaMiesiecy[5] = new Miesiac(6, "Czerwiec", 30);
        this.listaMiesiecy[6] = new Miesiac(7, "Lipiec", 31);
        this.listaMiesiecy[7] = new Miesiac(8, "Sierpień", 31);
        this.listaMiesiecy[8] = new Miesiac(9, "Wrzesień", 30);
        this.listaMiesiecy[9] = new Miesiac(10, "Październik", 31);
        this.listaMiesiecy[10] = new Miesiac(11, "Listopad", 30);
        this.listaMiesiecy[11] = new Miesiac(12, "Grudzień", 31);
    }

    public Miesiac[] getListaMiesiecy(){
        return this.listaMiesiecy;
    }

    // No setter required.
}