我正在尝试实现侦听器来跟踪值。我正在看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。
答案 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的代码作为字段跟踪的起点,如:
查看想法和代码并实施自己的字段跟踪。