2012-11-02 32 views
6

Ich habe folgende (selbsterklärend) Entity-relation:Wie man mehrere Komponenten (selectOneMenu) mit abhängigen Objektbeziehungen aktualisiert?

* 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> 
  • die letzten beiden p:selectOneMenu B sollte e auf der Auswahl aktualisierte je in den ersten
  • Die letzten p:selectOneMenu mit ID tireSel wird nicht korrekt aktualisiert zu
  • All to-be-aktualisierten Komponenten sind innerhalb der gleichen NamingContainer
  • der carSel aktualisiert wird, aber die geladenen Werte in tireSel fremd sind (scheinen für die letzte Anforderung gültig zu sein)
  • ich versuchte auch update="@form" in manufacturerSel

EDIT zeigen, die EL-Version verwendet wird: Heres ein Auszug meiner 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> 

Antwort

7

Sie grundsätzlich den selectedCar Wert räumen müssen. Sie können dazu <p:ajax listener> verwenden.

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

mit

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

Ansonsten ist der alte gewählte Wert wird beibehalten noch in der Bohne und die Liste der Reifen noch sich verlassen.

+0

Hi BalusC, obwohl ich EL 2.2 verwende, habe ich 'javax.el.ELException: Parsing fehlgeschlagen den Ausdruck [# {myBean.setSelectedCar (null)}]' – jimmybondy

+0

Welchen Servletcontainer verwenden Sie? In der Zwischenzeit erstellen Sie einfach eine Listener-Methode auf die übliche Weise, die den 'selectedCar'-Eigenschaftswert löscht. – BalusC

+0

Ich werde versuchen, eine Bean-Methode und Call-ID mit '' – jimmybondy

Verwandte Themen