f中的两个集合:selectItems - 可能吗?

时间:2011-03-22 08:01:16

标签: java jsf jsf-2 facelets

我有两个向量:

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>

1 个答案:

答案 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>