如何将JSF InputText值传递给ajax侦听器

时间:2018-04-25 10:19:16

标签: java jsf

我想将输入框中的值传递给ajax侦听器。请参考以下代码。

JSF:

<h:dataTable id="cleanerAttendance" value="#{bean.objMap.entrySet().toArray()}">
    <h:column> 
        <f:facet name="header">
            <div>Attendance</div>
        </f:facet>
        <div>
            <h:inputText value="entry.value">
                <f:ajax execute="@this" listener="#{bean.updateMap(entry)}"/>
            </h:inputText>
        </div>
    </h:column>
</h:dataTable>

Bean:

private Map<Obj2,Integer> objMap = new HashMap<Obj2,Integer>();

public void updateMap(Entry<Obj2,Integer> entry){
    System.out.println(entry.getValue());
    objMap.put(entry.getKey(), entry.getValue());
}

我想在输入值改变时更新objMap。但是当我运行它时,会调用updateMap方法。但entry.getValue()打印为null。有谁知道为什么它不起作用和正确的方法来做到这一点?

我已经检查了以下答案,但这对我没用。

Pass h:inputText value to f:ajax listener

How to pass parameter to f:ajax in h:inputText? f:param does not work

1 个答案:

答案 0 :(得分:1)

我会以其他方式做到这一点。首先为Map提供一个getter:

public Map<Obj2,Integer> getObjMap(){
  return objMap;
}

然后迭代键并根据您感兴趣的键设置值:

<h:dataTable id="cleanerAttendance" value="#{bean.objMap.keySet().toArray()}" var="obj">
    <h:column> 
        <f:facet name="header">
            <div>Attendance</div>
        </f:facet>
        <div>
            <h:inputText value="#{bean.objMap[obj]}">
                <f:ajax execute="@this" />
            </h:inputText>
        </div>
    </h:column>
</h:dataTable>

一旦每个ajax绑定事件发生,这将基本上调用模型更新,不需要监听器。 Haven自己测试过,所以试一试!

另见: