valueChangeListener的Ajax

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)

  • +1,有人应该做"BalusC IS AWESOME"视频(就像"PEOPLE are AWESOME"视频一样) (5认同)
  • 像往常一样,BalusC在我拥有它之前已经解决了我的问题. (2认同)

Mat*_*ndy 6

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:世界