从许多菜单中选择项目



好的,我有一个简单的菜单,我称之为听众

<p:selectManyMenu style="width: 100%;" id="cmbsectores" valueChangeListener="#{mbcompletado.removeItem}">                                            
      <f:selectItems value="#{mbcompletado.sectores}"/>    
      <f:ajax update="@this"/>
</p:selectManyMenu>

我正在寻找如何使用 ValueChangeEvent 传递作为参数来检测选择了哪个项目?所以我可以使用我的业务逻辑!

我需要使用 ajax 标记吗?我在我正在使用的框架 primeface 中找到了一个 itemSelect 事件,但它仅适用于图表组件!

提前致谢

由于您已经在使用 PrimeFaces,请使用 p:ajax 而不是 f:ajaxevent已设置为相应的事件 (值已更改)。

要检测selectManyMenu的选定值,必须value属性:

<p:selectManyMenu style="width: 100%;" id="cmbsectores"
    value="#{mbcompletado.selectedSectores}">                                            
    <f:selectItems value="#{mbcompletado.sectores}"/>    
    <p:ajax/>
</p:selectManyMenu>

您可以完全删除 valueChangeListener 侦听器。

有关更完整的示例,请参阅选择多个菜单。

编辑:

在您的后备 bean 中,mbcompletado.selectedSectores 应该指向与您的 mbcompletado.sectores 相同类型的集合。例如,如果你的sectoresTypeAListselectedSectores也应该是相同类型的ListTypeA)。

类似的背靠 Bean 结构可以在以下示例 SelectManyCheckbox 中找到。

您需要<f:ajax listener>(或在这种情况下更好的<p:ajax listener>)方法。ValueChangeListener用于完全不同的目的,仅当您对旧值和新值真正感兴趣时才应使用,而不是仅当您只对新值感兴趣时。

例如

<p:selectManyMenu value="#{bean.selectedSectors>
    <f:selectItems value="#{bean.availableSectors}"/>    
    <p:ajax listener="#{bean.selectedSectorsChanged}" />
</p:selectManyMenu>

private List<String> selectedSectors;
private List<String> availableSectors;
public void selectedSectorsChanged() {
    System.out.println("Selected sectors are: " + selectedSectors); // Look, JSF has already set it.
    // ...
}

另请参阅:

  • 何时使用 valueChangeListener 或 f:ajax listener?

最新更新