7

私は次の(自明の)エンティティ関係を持っています:

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

マイビーン

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>
  • 最後の 2 つp:selectOneMenuは、最初の選択に応じて更新する必要があります。
  • 最後のp:selectOneMenuIDtireSelが正しく更新されていません
  • 更新されるすべてのコンポーネントは同じ中にありますNamingContainer
  • carSel更新されますが、ロードされた値tireSelは奇妙です (最後の要求に対して有効であるようです)
  • 私も試してみupdate="@form"ましたmanufacturerSel

EDIT どのELバージョンが使用されているかを表示するには:これは私の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>
4

2 に答える 2

10

基本的に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.
}

それ以外の場合、古い選択値は引き続きBeanに保持され、タイヤのリストは引き続きそれに依存します。

于 2012-11-02T14:44:04.033 に答える