Используя JSF, я пытаюсь создать некую сложную ситуацию (имена классов были реорганизованы, а пример минималистичен):
DB
отношение: a guy
имеет a car
, a car
имеет a type
, a type
имеет cars
selectOneMenu
для CarType
необходимо выполнять 2 роли:
- показатьтип автомобиля в загрузка
- изменить предложения автомобилей при его изменении
Когда я загружаю свои dataTable
для каждого ряда,Я хочу показать стоимость автомобиля, если у парня есть такой (null
- правильный выбор), и в selectOneMenu
для CarType
, если хотите показать тип машины парня, если у парня естьодин, но я не могу использовать guy.car.carType
, потому что я не хочу перезаписывать при изменении его значения, это меню также должно служить меню research : я выбираюa Тип, я вижу его машины
Я не могу понять, какую привязку использовать для установки его значения в начале
1.Классы
class Guy{
Car car;
}
class Car{
CarType type;
}
class CarType{
String type;
}
2.Вид
<p:dataTable value="#{Bean.guys}" var="guy">
<p:column>
<p:selectOneMenu value="#{Bean.selectedType}>
<f:selectItem value="#{null}" />
<f:selectItems value="#{Beans.types}">
<p:ajax event="change" listener="#{bean.changeType}" />
</p:selectOneMenu>
</p:column>
<p:column>
<p:selectOneMenu value="#{Bean.selectedCar}>
<f:selectItem value="#{null}" />
<f:selectItems value="#{Beans.cars(guy)}" />
<p:ajax event="change" listener="#{bean.changeCar(guy)}" />
</p:selectOneMenu>
</p:column>
</p:dataTable>
3.Боб
class Bean{
public List<Guy> guys; // filled from DB
public List<Car> cars; // filled from DB
public List<CarType> types; // filled from DB
private Car selectedCar; // getter setter ok
private CarType selectedType; // getter setter ok
public List<Car> cars(Guy g){
selectedCar = g.getCar();
cars = selectedCar.getCarType().getCars(); // all cars of this type
}
public void changeType(){
cars = selectedType.getCars();
}
public void changeCar(Guy g){
g.setCar(selectedCar);
}
}