从许多菜单中选择项目

时间:2012-11-13 19:51:11

标签: jsf-2 primefaces

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

<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事件,但它只适用于图表组件!

提前致谢

2 个答案:

答案 0 :(得分:1)

由于您已使用PrimeFaces,因此请使用p:ajax代替f:ajaxevent已设置为相应的事件(valueChanged)。

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

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

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

有关更完整的示例,请参阅SelectManyMenu

修改

在您的支持bean中mbcompletado.selectedSectores应该指向与mbcompletado.sectores相同类型的集合。例如,如果您的sectoresList TypeAselectedSectores也应该是同一类型的ListTypeA)。

类似的backing-bean结构可以在以下示例SelectManyCheckbox中找到。

答案 1 :(得分:0)

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

E.g。

<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.
    // ...
}

另见: