识别触发ajax侦听器的组件

时间:2016-09-22 08:21:28

标签: ajax jsf

我有2个inputText组件:

<h:inputText id="inputCode">
    <f:ajax event="valueChange" listener="#{mbean.inputListener}"/>
</h:inputText>

<h:inputText id="inptValue"> 
    <f:ajax event="valueChange" listener="#{mbean.inputListener}"/>
</h:inputText>

并在托管bean中:

字段:

long inputCode;
String inputText;
听众:

public void inputListener(AjaxBehaviorEvent abe) {
  UIInput uiinput = (UIInput)abe.getSource();
  if(the listener is triggered by the inputText with id="inputCode") {
     inputCode = (long)uiinput.getValue();
  } else {
     inputText = String.valueOf(uiinput.getValue());     
  }
}

问题是:如何区分inputText是被触发的侦听器,以便知道在哪个字段中保存值? 我不想为每个inputText创建一个监听器。

我可以使用component.id通过组件id来完成它,但是如果它有2个参数,我怎么能用该参数调用监听器:AjaxBehaviorEvent和另一个是组件id?

1 个答案:

答案 0 :(得分:0)

uiinput上已经存在该ID。通过查看UIInput的api,您可能已经看到了这一点,因此您所需要做的就是确定是否需要使用id或clientId。后者以父命名容器的所有ID开头。

public void inputListener(AjaxBehaviorEvent abe) {
  UIInput uiinput = (UIInput)abe.getSource();
  if(uiinput.getId().equals("inputCode")) {
     inputCode = (long)uiinput.getValue();
  } else {
     inputText = String.valueOf(uiinput.getValue());     
  }
}

应该做到这一点。