实现服务器端值更改事件/侦听器

时间:2015-08-11 20:03:04

标签: java xpages

我正在尝试实现侦听器来跟踪值。我正在看Tony McGuckin的xSnippet http://openntf.org/XSnippets.nsf/snippet.xsp?id=server-side-value-change-events-listeners,但它失败了。当我粘贴代码时,它在页面上失败。看起来java代码存在问题,但我在这里猜测。 “Pizza”评论下面的所有内容都被注释掉了,而且我还不够聪明,无法修复它。

package com.ibm.xsp.beans;

import javax.faces.component.UIComponent;
 import javax.faces.event.ValueChangeEvent;

/*
 * @author Tony McGuckin, IBM
 */
public class ChangeRequestBean { 

  public ChangeRequestBean (){}

  public void valueChangeListener(ValueChangeEvent valueChangeEvent){

// Note: valueChangeListener's are fired during the PROCESS_VALIDATIONS phase
// but only after any binded validator(s) on the component succeeds...
UIComponent c = valueChangeEvent.getComponent();
System.out.println("Value changed component: " + c.getId());
System.out.println("Old value: " + valueChangeEvent.getOldValue());
System.out.println("New value: " + valueChangeEvent.getNewValue());

// do something useful...
//    perform second level check with a service...
//    order a pizza using REST... whatever!
/*
if(ChangeRequestService.doesNotApproveThisNewlyValidatedValue(c.getId(), valueChangeEvent.getNewValue()){
  FacesContext context = FacesContext.getCurrentInstance();
  context.addMessage(
    c.getClientId(context), new FacesMessage(
      FacesMessage.SEVERITY_ERROR,
      ChangeRequestService.getMessage(),
      ChangeRequestService.changeRequest.getSummary()
    )
  );
  // failover to the RENDER_RESPONSE phase...
  FacesContext.getCurrentInstance().renderResponse();
}
    */
   }

} // end ChangeRequestBean

如果有人有现场跟踪机制,他们愿意分享,这将解决我的问题。所有关于此的代码博客文章都已有几年了,我在实施方面遇到了一些麻烦。

[编辑]

如果有所不同,我正在运行Domino 9.0.1 fp3。

1 个答案:

答案 0 :(得分:1)

评论中的代码并不是真正有用的代码。只是想知道那里可以做些什么。

ChangeRequestService停留在一个虚构的Java类中,该类使用方法doesNotApproveThisNewlyValidatedValue检查新值并传递错误消息字符串。

仅出于演示目的,此课程可能如下所示:

package com.ibm.xsp.beans;

public class ChangeRequestService {

    public static boolean doesNotApproveThisNewlyValidatedValue(String id, Object newValue) {
        if (newValue != null && newValue.toString().length() == 3) {
            return true;
        }
        return false;
    }

    public static String getMessage() {
        return "Value can't be 3 characters long ... bla ... bla ...";
    }

}

并且“披萨”下面的代码可能是

    if (ChangeRequestService.doesNotApproveThisNewlyValidatedValue(c.getId(), valueChangeEvent.getNewValue())) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(c.getClientId(context), new FacesMessage(ChangeRequestService.getMessage()));
        // failover to the RENDER_RESPONSE phase...
        FacesContext.getCurrentInstance().renderResponse();
    }

只要提交的值恰好是3个字符长,就会显示消息“值不能超过3个字符... bla ... bla ...”。

我知道那不是你想要的。

有些博客使用Tony的代码作为字段跟踪的起点,如:

查看想法和代码并实施自己的字段跟踪。