0

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

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

提前致谢

4

2 回答 2

1

由于您已经在使用 PrimeFaces 使用p:ajax而不是f:ajax. event已设置为适当的事件 (valueChanged) 。

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

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

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

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

编辑:

在您的支持 beanmbcompletado.selectedSectores中应该指向与您的mbcompletado.sectores. 例如,如果您sectores是 a Listof TypeAselectedSectores则应该也是List同类型 ( TypeA) 的 a。

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

于 2012-11-13T20:07:25.977 回答
0

您需要<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.
    // ...
}

也可以看看:

于 2012-11-13T23:30:07.187 回答