2011-03-22 5 views
0

f : selectItems의 두 컬렉션 - 가능합니까?

두 개의 벡터가 있습니다.

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

City 객체에는 cityId, 우편 번호 및 도시 이름, address-object에는 addressId, street 및 cityId가 포함됩니다. 벡터 allCities에는 allAddress가 사용하는 도시보다 많은 도시가 포함될 수 있습니다.

이제 모든 주소를 아아에 표시하고 싶습니다. selectOneListbox 대신 cityId 대신 우편 번호와 cityname이 있어야합니다.

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> 

답변

2

당신은 당신의 기본 설정의 일부를 변경해야합니다 : 모든

먼저 당신이 List 대신 Vector 사용해야합니다.

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

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

// getters and setters 
} 

그런 다음 당신은 당신의 facelet이 방법을 사용할 수 있습니다 :

그런 다음 Address 클래스는 City 이와 같은 멤버를 보자