代码之家  ›  专栏  ›  技术社区  ›  Chathura Buddhika

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

  •  1
  • Chathura Buddhika  · 技术社区  · 6 年前

    我想将输入框中的值传递给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 回复  |  直到 6 年前
        1
  •  1
  •   Aritz    6 年前

    我会用另一种方式。首先为映射提供一个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绑定事件发生后调用模型更新,不需要监听器。我自己还没有测试过,试试吧!

    另请参见: