jsf - 如何使用依赖对象关系更新多个组件(selectOneMenu)?

标签 jsf jsf-2 primefaces selectonemenu

我有以下(不言自明的)实体关系:

* 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与 ID 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>
    

    最佳答案

    你基本上需要清除selectedCar值(value)。您可以使用 <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 中,并且轮胎列表仍将取决于该值。

    关于jsf - 如何使用依赖对象关系更新多个组件(selectOneMenu)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197385/

    相关文章:

    css - 根据条件为 primefaces 表格单元格着色

    jquery - JSF2.0 + Primefaces 3.0.1 + jquery 1.6.4 + p :commandLink + IE8 throws Unexpected call to method or property

    javascript - 如何在 JS 中检查 p :calendar value is empty?

    css - 如何删除 <p :dataTable> 中的水平滚动条

    jsf-2 - 如何将 Primefaces inputMask 限制为仅数字?

    html - h :selectOneMenu? 渲染的选择元素的默认大小是多少

    java - JSF 2.0 AJAX : Call a bean method from javascript with jsf. ajax.request(或其他方式)

    java - IntelliJ Idea 14 JSF XHTML 代码风格

    jsf - 在 JSF 中是否有一种方便的方法来创建带有样式的格式化输出?

    java - 在 JSF HttpServletRequest 对象 getAttribute() 返回 Null 中