2012-11-02 3 views
6

у меня есть следующий (само-пояснительная) сущность-связь:Как обновить несколько компонентов (selectOneMenu) с зависимыми объектами?

* Manufacturer 
* Car (Manufacturer.getCars()) 
* Tire (Car.getTires()) 

MyBean

private List<Manufacturer> allManufacturers 

private Manufacturer selectedManufacturer 
private Car selectedCar 
private Tire selectedTire 

XHTML

<p:selectOneMenu id="manufacturerSel" value="#{myBean.selectedManufacturer}" converter="#{manufacturerConverter}"> 
    <f:selectItem itemLabel="None" itemValue="#{null}" /> 
    <f:selectItems value="#{myBean.allManufacturers}" /> 
    <p:ajax update="carSel tireSel" /> 
</p:selectOneMenu> 

<p:selectOneMenu id="carSel" value="#{myBean.selectedCar}" converter="#{carsConverter}" disabled="#{empty myBean.selectedManufacturer.cars}"> 
    <f:selectItem itemLabel="None" itemValue="#{null}" /> 
    <f:selectItems value="#{myBean.selectedManufacturer.cars}" /> 
    <p:ajax update="tireSel" /> 
</p:selectOneMenu> 

<p:selectOneMenu id="tireSel" value="#{myBean.selectedTire}" converter="#{tiresConverter}" disabled="#{empty myBean.selectedCar.tires}"> 
    <f:selectItem itemLabel="None" itemValue="#{null}" />        
    <f:selectItems value="#{myBean.selectedCars.tires}" /> 
</p:selectOneMenu> 
  • последние два p:selectOneMenu должны б е обновляется в зависимости от выбора в первом одном
  • Последний p:selectOneMenu с ID tireSel не обновляется правильно
  • Все, чтобы быть обновляемые компоненты находятся внутри одной и той же NamingContainer
  • в carSel обновляется, но значения, загруженные в tireSel странные (кажется, действительны для последнего запроса)
  • я также попытался update="@form" в manufacturerSel

EDIT Чтобы показать, который используется EL Версия: Here's отрывок из моего pom.xml

<dependency> 
    <groupId>javax.faces</groupId> 
    <artifactId>javax.faces-api</artifactId> 
    <version>2.1</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.faces</artifactId> 
    <version>2.1.12</version> 
</dependency>  
<dependency> 
    <groupId>javax.el</groupId> 
    <artifactId>el-api</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope> 
</dependency> 

ответ

7

Вы в основном нужно очистить значение selectedCar. Вы можете использовать <p:ajax listener>.

<p:ajax listener="#{myBean.clearSelectedCar}" update="carSel tireSel" /> 

с

public void clearSelectedCar() { 
    selectedCar = null; // You might want to clear selectedTire as well. 
} 

В противном случае старое выбранное значение будет по-прежнему сохраняют в компоненте и список шин будет по-прежнему зависеть от этого.

+0

Привет, BalusC, хотя с использованием EL 2.2 я получил 'javax.el.ELException: не удалось проанализировать выражение [# {myBean.setSelectedCar (null)}]' – jimmybondy

+0

Какой сервлетконтейнер вы используете? В то же время просто создайте метод слушателя обычным способом, который очищает значение свойства selectedCar. – BalusC

+0

Я попытаюсь добавить bean-метод и идентификатор вызова с помощью '' – jimmybondy

 Смежные вопросы

  • Нет связанных вопросов^_^