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

标签 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>

托管Bean:

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

所以,当然,这在内部发生了一些事情: List 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 

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

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

最佳答案

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

关于java - 为什么我需要在此处的 Managed Bean 中显式创建 ArrayList 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27490650/

相关文章:

java - 更改了DB,更新了DB版本无法添加数据也无法不添加数据

java - 有没有使用 maven 运行可执行 jar 的好方法?

java - PrimeFaces 自动完成更改默认大小

jsf - 将参数传递给a4j :ajax method

security - JSF 安全 : bean method accessibilty

java - jpa hibernate,是否可以在不指定查询的情况下列出表的所有行?

java - session 类型中的重复方法 session (字符串) - 错误

jsf - 将 JSF dataTable 中组件的 id 设置为数组中当前项的值

JSF 2.1 - 获取 FacesContext 策略

jsf - 如果托管 bean 中的条件为真,则打开一个新窗口