2012-11-02 13 views
6

Ho le seguenti (autoesplicativo) entità-relazione:Come aggiornare più componenti (selectOneMenu) con relazioni di oggetti dipendenti?

* 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> 
  • gli ultimi due p:selectOneMenu se B e aggiornato a seconda della selezione nel primo
  • L'ultimo p:selectOneMenu con ID tireSel non si aggiorna correttamente
  • Tutto il essere-aggiornati componenti sono all'interno della stessa NamingContainer
  • il carSel viene aggiornata, ma la valori caricati in tireSel sono strani (sembrano essere valida per l'ultima richiesta)
  • inoltre ho provato update="@form" in manufacturerSel

EDIT per mostrare quale EL Versione viene utilizzato: Here's un estratto del mio 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> 

risposta

7

È fondamentalmente bisogno di cancellare il valore selectedCar. È possibile utilizzare <p:ajax listener> per questo.

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

con

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

Altrimenti il ​​vecchio valore selezionato sarà ancora mantenere nel chicco e la lista dei pneumatici sarà ancora dipendere da quello.

+0

Hi BalusC, sebbene utilizzi EL 2.2 ho ottenuto 'javax.el.ELException: Impossibile analizzare l'espressione [# {myBean.setSelectedCar (null)}' – jimmybondy

+0

Cosa servlet container stai usando? Nel frattempo basta creare un metodo listener nel modo consueto che cancella il valore della proprietà 'selectedCar'. – BalusC

+0

Proverò ad aggiungere un metodo bean e l'id di chiamata con '' – jimmybondy