我有以下(不言自明的)实体关系:
* 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>
p:selectOneMenu
应根据第一个p:selectOneMenu
的最后tireSel
未正确更新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>
答案 0 :(得分:7)
您基本上需要清除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中,轮胎列表仍将依赖于此。
答案 1 :(得分:0)
通常,PrimeFaces 命令按钮更新适用于整个表单。但有时我们不想更新整个表单,也许我们想更新一个具有一个 id 的 div 或具有相同类的多个 div。它适用于 Primefaces 和 Spring Boot。
如果要更新整个表单,只需更改更新属性-
update="@form"
如果你想更新一个 ID 内的 div
update="@(#divId)"
如果要使用类名更新多个 div 或单个 div-
update="@(.className)"
如果要使用类名更新多个 div 或单个 div-
update="@(.className1, .className2)"