如何使一个 SelectManyMenu 依赖于 JSF 中的另一个?

How to make one SelectManyMenu depends on other in JSF?

我在 PrimeFaces 中有两个 selectManyMenu:

    <p:selectManyMenu id="vehicleMakes"
          value="#{analyticsController.selectedVehiclesMake}"
          filter="true"
          filterMatchMode="startsWith"
          multiple="true"
          scrollHeight="250"
          showCheckbox="true" 
          styleClass="customInput manymenu-advanced"
          label="#{msg['ANALYTICS-vehicle-brand-select']}">
          <f:selectItems var="make" itemLabel="#{make}"
                 value="#{analyticsController.vehicleMakeList}"
                 itemValue="#{make}"
          />
                 <p:ajax event="change"  listener="#{analyticsController.restoreFilters()}"> 
                 </p:ajax>
    </p:selectManyMenu>

另一个:

<p:selectManyMenu id="vehicleModels"
         value="#{analyticsController.selectedVehiclesModel}"
         filter="true"
         filterMatchMode="startsWith"
         multiple="true"
         scrollHeight="250"
         onchange="familyComponents(this, 'gfVehicleModelList', 'selectManyMenu')"  
         showCheckbox="true" 
         styleClass="customInput manymenu-advanced gfVehicleModelList"
         label="#{msg['ANALYTICS-vehicle-model-select']}">
         <f:selectItems 
               var="model" 
               itemLabel="#{model}"
               value="#{analyticsController.vehicleModelList}"
               itemValue="#{model}"
         />
</p:selectManyMenu>

但是我需要当一个元素在 select 第一个中被 select 编辑时,根据 select 第二个中的 FK 加载内容,为此我创建了这个函数:

public void filterModelBySelectedMakes(){
        if (!CollectionUtils.isEmpty(selectedVehiclesMake) && !CollectionUtils.isEmpty(makes)){
            List<Integer> makeIds = makes.stream().filter(make -> selectedVehiclesMake.contains(make.getName())).map(Make::getId).sorted().collect(Collectors.toList());
            vehicleModelList = models.stream().filter(model -> makeIds.contains(model.getMakeId())).map(Model::getName).filter(StringUtils::isNotBlank).sorted().collect(Collectors.toList());
        }
    }

直接使用已经加载好的List,不知道什么时候执行这个函数?或者如果有其他更简单的方法,你能帮我吗?

提前致谢

你想看这个例子:https://www.primefaces.org/showcase-v8/ui/ajax/dropdown.xhtml

正是您想要的,根据第一个组件中的选择更改第二个组件的内容。