时间:2014-11-20 09:21:01

标签: jsf-2 primefaces

我有一个selectOneMenu元素(carType),它在更改它时填充另一个selectOneMenu(制造)元素。这很好用,我每次都会渲染它。

然后我有另一个selectOneMenu(模型),它会立即填充,制造列表会被更改。但这似乎不起作用。我发现carManufacturerChanged根本没有调用监听器。任何帮助将不胜感激。代码是:

<p:selectOneMenu value="#{createControler.carType}">
    <f:selectItem itemLabel="Select Car Type" itemValue="" />
    <f:selectItems value="#{createControler.carTypeList}" var="carType"
        itemLabel="#{carType}" itemValue="#{carType}"/>
    <f:ajax event="change" listener="#{createControler.carTypeChanged}" render="manufacture"/>
</p:selectOneMenu><br></br><br></br>

<p:selectOneMenu value="#{createControler.carManufacturer}" id="manufacture">
    <f:selectItem itemLabel="Select Car Manufacturer" itemValue="" />
    <f:selectItems value="#{createControler.carManufacturerList}" var="carManufacturer"
        itemLabel="#{carManufacturer.manufacture}" itemValue="#{carManufacturer.manufacture}"/>
    <f:ajax event="change" listener="#{createControler.carManufacturerChanged}" render="model" />
</p:selectOneMenu><br></br><br></br>

<p:selectOneMenu value="#{createControler.carModel}" id="model">
    <f:selectItem itemLabel="Select Car Model" itemValue="" />
    <f:selectItems value="#{createControler.carModelList}" var="carModel"
        itemLabel="#{carModel.model}" itemValue="#{carModel.model}"/>
</p:selectOneMenu><br></br><br></br>

编辑:当我在carManufacturer菜单中添加另一个<f:selectItem itemValue="random" itemLabel="random" />并选择它时,将调用该侦听器。所以,我认为问题可能是没有触发在运行时呈现的元素的侦听器。对可以回答的人有帮助。

1 个答案:

答案 0 :(得分:0)

去检查相应的 CDI bean 的范围。如果它是 RequestScoped ,请将范围更改为 ViewScoped 或跨越多个请求的范围。