为什么我需要在Managed Bean中显式创建ArrayList的实例?

时间:2014-12-15 18:27:58

标签: java jsf-2 managed-bean faces-config

考虑:

<h:body>
        <h:dataTable value="#{integerListEntriesBean.racePlacement}" var="placement">
            <h:column>
                <h:outputText value="#{placement}" />
            </h:column>
        </h:dataTable>
</h:body>

ManagedBean:

public class IntegerListEntriesBean {

    // Notice carefully here just an object reference of type List<> exists
    private List<Integer> racePlacement;


    public List<Integer> getRacePlacement() {
        return racePlacement;
    }

    public void setRacePlacement(List<Integer> racePlacement) {
        this.racePlacement = racePlacement;
    }

}

faces-config.xml中的条目:

    <managed-bean>
        <managed-bean-name>integerListEntriesBean</managed-bean-name>
        <managed-bean-class>com.jsf.ch5.IntegerListEntriesBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>racePlacement</property-name>
            <property-class>java.util.List</property-class>
            <list-entries>
                <value-class>java.lang.Integer</value-class>
                <value>30</value>
                <value>10</value>
                <value>50</value>
                <value>40</value>
                <value>20</value>
            </list-entries>
        </managed-property>
    </managed-bean>

O / P:

30 
10 
50 
40 
20

所以,当然这发生在内部: 列出racePlacement = new ArrayList();

现在,如果我在ManagedBean中稍作修改,以便将元素添加到构造函数中的 ArrayList

public class IntegerListEntriesBean {
    // Notice carefully here I had to explicitly create an object here.
    private List<Integer> racePlacement = new ArrayList<Integer>();
    public IntegerListEntriesBean(){
        racePlacement.add(500);
        racePlacement.add(600);
    }

    public List<Integer> getRacePlacement() {
        return racePlacement;
    }

    public void setRacePlacement(List<Integer> racePlacement) {
        this.racePlacement = racePlacement;
    }

}

O / P 现在:

500 
600 
30 
10 
50 
40 
20 

由于对象( 新的ArrayList&lt;&gt;() )在内部创建 (意味着 手动不是由我创建的 ), 为什么我需要 显式地 现在的ManagedBean 中创建对象(在 中第二种情况 )? 即

List<Integer> racePlacement = new ArrayList<Integer>();

1 个答案:

答案 0 :(得分:1)

这是必要的,因为构造函数是在faces-config处理器之前执行的。 racePlacement必须是一个支持“添加”的对象。方法