如何在ajax监听器方法中通过索引获取输入组件的值?

时间:2013-04-24 13:22:04

标签: jsf-2 primefaces

我正在动态生成#{materielBean2.nbrsalle}次下拉菜单:

<c:forEach begin="1" end="#{materielBean2.nbrsalle}" var="i">
    <p:selectOneMenu id="p#{i}" value="#{materielBean2.pole}">
        <f:selectItem itemLabel="Select Pole" itemValue="" />
        <f:selectItems value="#{materielBean2.poles}" />
        <p:ajax event="change" update="s#{i}" listener="#{materielBean2.salleChange(i)}" />
    </p:selectOneMenu>
</c:forEach>

我有一个Map<String, String>属性,我想保存所选的值。

private Map<String, String> selectedPoles = new HashMap<String, String>();

ajax更改侦听器方法如下:

public void sallechange(int i) {
    selectedPoles.put(i, pole);
}

如何在侦听器方法中获取索引pole的选定i值?

1 个答案:

答案 0 :(得分:1)

直接将输入值绑定到该地图。

<p:selectOneMenu id="p#{i}" value="#{materielBean2.selectedPoles[i]}">

您只需要更改地图以获取整数键。

private Map<Integer, String> selectedPoles = new HashMap<Integer, String>();

或者只是使用一个简单的数组,可以完全相同的方式访问。

private String[] selectedPoles = new String[poles.size()];

无论哪种方式,这样你都可以完全摆脱<p:ajax>。 JSF会为你神奇地设置它。

<p:selectOneMenu id="p#{i}" value="#{materielBean2.selectedPoles[i]}">
    <f:selectItem itemLabel="Select Pole" itemValue="" />
    <f:selectItems value="#{materielBean2.poles}" />
</p:selectOneMenu>