Dan*_*lor 10 ajax jsf onchange primefaces jsf-2
我正在使用p:ajax
监听器来处理值更改事件(因为valueChangeListener
在表单提交时启动):
<p:ajax event="change" listener="#{bean.onNameChanged}"/>
Run Code Online (Sandbox Code Playgroud)
处理方法:
public void onNameChanged(final AjaxBehaviorEvent event)
Run Code Online (Sandbox Code Playgroud)
问题是,我无法在AjaxBehaviorEvent
其类层次结构中找到读取输入旧值的位置.我也不能在谷歌中找到提示,如何获得旧价值......
如何在p:ajax onChange
事件中访问旧值?
Bal*_*usC 19
问题是,我在AjaxBehaviorEvent中找不到它的类层次结构来读取输入的旧值的地方.我也不能在谷歌中找到提示,如何获得旧价值......
用一个valueChangeListener
.
不幸的是,valueChangeListener在p:ajax之前被调用,所以我没有该方法中表单的实际数据,所以理论上我可以使用valueChangeListener来记住旧值,然后等待p:ajax来处理...
将值更改事件排队到调用应用程序阶段.
public void valueChangeListenerMethod(ValueChangeEvent event) {
if (event.getPhaseId() != PhaseId.INVOKE_APPLICATION) {
event.setPhaseId(PhaseId.INVOKE_APPLICATION);
event.queue();
return;
}
// Do your original job here.
// It will only be invoked when current phase ID is INVOKE_APPLICATION.
}
Run Code Online (Sandbox Code Playgroud)
ValueChangeListener应该以这种方式工作:
风景:
<h:form>
<h:inputText value="#{sessionBean.hello}"
valueChangeListener="#{sessionBean.valueChangeListener}">
<p:ajax/>
</h:inputText>
</h:form>
Run Code Online (Sandbox Code Playgroud)
豆子:
public void valueChangeListener(ValueChangeEvent e) {
System.out.println("valueChangeListener invoked:"
+ " OLD: " + e.getOldValue()
+ " NEW: " + e.getNewValue());
}
Run Code Online (Sandbox Code Playgroud)
如果我将文本字段从"hello"更改为"world",将打印上面的代码:
valueChangeListener被调用:OLD:你好NEW:世界