考虑:
<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/