【发布时间】:2016-09-22 08:21:28
【问题描述】:
我有 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 创建一个监听器。
我可以通过组件 id 使用 component.id 来做到这一点,但是当它有 2 个参数时如何使用该参数调用侦听器:AjaxBehaviorEvent 和另一个将是组件 id?
【问题讨论】:
-
从组件中获取 id,就像你已经在伪代码中所做的那样
-
嗯,好点,但我怎样才能将组件 id 作为参数传递给监听器呢?通过使用 listener=#{mbean.inputListener(component.id)} 将不起作用,因为 inputListener 有一个参数 AjaxBehaviorEvent。如果我有签名 inputCodeListener(AjaxBehaviorEvent abe, String componentId),我该如何调用这个方法?
-
你没有,它已经在 uiinput 上(也许你需要向上转换它)
-
不是一个真正的答案...我只是将输入值与托管 bean 中存储的当前(以前)值进行比较
-
谢谢你们。 Kukeltje 我采纳了你的建议。我不认为你的建议是接受它的答案。 (我怎么能接受?)