Две коллекции в f: selectItems - возможно? - PullRequest
0 голосов
/ 22 марта 2011

У меня есть два вектора:

private Vector<City> allCities;
private Vector<Address> allAddresses;

Объект City содержит идентификатор города, почтовый индекс и название города, объект адреса, идентификатор адреса, улицы и города. Вектор allCities может содержать больше городов, чем используется всеми адресами.

Теперь я хочу показать все адреса в h: selectOneListbox, но вместо 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 Ответ

2 голосов
/ 22 марта 2011

Вы должны изменить некоторые из ваших основных настроек:

Прежде всего вы должны использовать List вместо Vector.

Тогда пусть класс Address имеет члена City такой как это:

public class Address {
 private City city;
 private int addressId;
 private String street;

 // getters and setters
}

Тогда вы можете использовать это в своем лицевом щитке таким образом:

<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>
...