我有两个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创建一个监听器。
我可以通过组件id来做,使用component。id,但是我怎么能用这个参数调用监听器,而它有2个参数:AjaxBehaviorEvent和另一个将是组件id?
该id在uiinput
上已经存在。您可以通过查看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());
}
}