我想将输入框中的值传递给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
最佳答案
我会用其他方式来做。首先为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 绑定(bind)事件发生,这将基本上调用模型更新,无需监听器。还没有亲自测试过,所以尝试一下!
另请参阅:
关于java - 如何将 JSF InputText 值传递给 ajax 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50019750/