我正在尝试实现监听器来跟踪值。我在看 Tony McGuckin 的 xSnippet http://openntf.org/XSnippets.nsf/snippet.xsp?id=server-side-value-change-events-listeners但它失败了。当我粘贴代码时,它在页面上失败了。看起来java代码有问题,但我在这里猜测。 “Pizza”评论下面的所有内容都被注释掉了,我的 Java 不够聪明,无法修复它。
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。
最佳答案
注释中的代码不是真正有效的代码。它只是用来了解在那里可以做什么。
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 ...";
}
}
“pizza”下面的代码可以是
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 ...”。
我知道这不是您要找的。p>
有一些博客使用 Tony 的代码作为字段跟踪的起点,例如:
- Using a valueChangeListener to build an Audit Trail
- XPages: Detecting and Logging Field Value Changes
在那里寻找想法和代码并实现您自己的现场跟踪。
关于java - 实现服务器端值更改事件/监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31950942/