我有两个向量:
private Vector<City> allCities;
private Vector<Address> allAddresses;
City-object包含cityId,邮政编码和城市名称,Address-object,addressId,street和cityId。向量allCities可以包含比allAddresses使用的城市更多的城市。
现在我想在h:selectOneListbox中显示所有地址,但是应该有postcode和cityname,而不是cityId,如下所示:
postcode, cityname, street
有没有办法在不改变向量的情况下做到这一点?也许c:forEach是一个选项吗?
以下内容尚未解决,因为我不知道如何在f:selectItems中连接或使用这两个向量。
<h:selectOneListbox id="addresses"
rendered="#{!empty customerAddresses.allAddresses}"
required="true" requiredMessage="Please choose an address!"
value="#{customerAddresses.addrId}" label="Addresses">
<f:selectItems value="#{customerAddresses.allAddresses}" var="addr"
itemLabel="#{addr.postcode}, #{addr.cityname}, #{addr.street}"
itemValue="#{addr.addressId}" />
</h:selectOneListbox>
答案 0 :(得分:2)
您应该更改一些基本设置:
首先,您应该使用List
代替Vector
。
然后让Address
类有一个像这样的成员City
:
public class Address {
private City city;
private int addressId;
private String street;
// getters and setters
}
然后你可以这样在你的facelet中使用它:
<h:selectOneListbox id="addresses"
rendered="#{!empty customerAddresses.allAddresses}"
required="true" requiredMessage="Please choose an address!"
value="#{customerAddresses.addrId}" label="Addresses">
<f:selectItems value="#{customerAddresses.allAddresses}" var="addr"
itemLabel="#{addr.city.postcode}, #{addr.city.cityname}, #{addr.street}"
itemValue="#{addr.addressId}" />
</h:selectOneListbox>