2012-11-02 7 views
6

I mają następujące (intuicyjną) podmiotowych zależnościąJak zaktualizować wiele komponentów (selectOneMenu) z zależnościami zależnych obiektów?

* 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> 
  • dwa ostatnie p:selectOneMenu powinny b e aktualizowana w zależności od wyboru w pierwszej jednej
  • Ostatni p:selectOneMenu z ID tireSel nie jest aktualizowana poprawnie
  • Wszystko to-be-zaktualizowane składniki są wewnątrz tego samego NamingContainer
  • z carSel jest aktualizowany, ale wartości załadowane tireSel są dziwne (wydają się być ważne dla ostatniego żądania)
  • próbowałem też update="@form" w manufacturerSel

EDIT Aby pokazać, który jest stosowany EL Wersja: Here's fragment mojego 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> 

Odpowiedz

7

Zasadniczo trzeba usunąć wartość selectedCar. Możesz użyć do tego celu <p:ajax listener>.

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

z

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

przeciwnym razie stare wybrana wartość będzie nadal zachowują w fasoli i lista opon nadal będzie zależeć od tego.

+0

Witaj BalusC, ale używając EL 2.2 dostałem "javax.el.ELException: Nie udało się sparsować wyrażenia [# {myBean.setSelectedCar (null)}]' – jimmybondy

+0

Jakiego servletcontainer używasz? W międzyczasie po prostu stwórz metodę detektora w zwykły sposób, który usuwa wartość właściwości selectedCar. – BalusC

+0

Spróbuję dodać metodę fasoli i wywołać id z '' – jimmybondy

Powiązane problemy