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>
  • 最后两个p:selectOneMenu应根据第一个中的选择进行更新
  • 最后一个p:selectOneMenuIDtireSel未正确更新
  • 所有要更新的组件都在同一个内部NamingContainer
  • 得到carSel更新,但加载的值tireSel很奇怪(似乎对最后一个请求有效)
  • update="@form"我也试过manufacturerSel

编辑 显示使用了哪个 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 回答
2

通常,PrimeFaces 命令按钮更新适用于整个表单。但有时我们不想更新整个表单,也许我们想更新一个 id 的 div 或同一个类的多个 div。它适用于 Primefaces 和 Spring Boot。

如果您想更新整个表单,只需更改更新属性 -

update="@form"

如果要更新 ID 中的 div

update="@(#divId)"

如果要使用类名更新多个 div 或单个 div-

update="@(.className)"

如果要使用类名更新多个 div 或单个 div-

update="@(.className1, .className2)"
于 2021-05-30T10:08:35.537 回答