最次换新东家。公司的管理系统用的是zk,而我又是喜欢使用spring的。
对于第一次使用zk,看了一次文档后,就想使用其自身提供的zk与spring的组合了。
所有的配置也完成了,但在@EventHandler上就是不生效
添加的事件不启动。看过源码后。
发现GenericSpringComposer.java当中
private void processEventsAnnotation(Component comp, String annotationValue, String mdname) {
if (annotationValue == null) {
return;
}
List<String> annotationValueTokens = (List<String>) CollectionsX.parse(new ArrayList<String>(), annotationValue, ',');
for (String annotationValueToken : annotationValueTokens) {
String srccompid = annotationValueToken.substring(0, annotationValueToken.indexOf('.'));
String srcevt = annotationValueToken.substring(annotationValueToken.indexOf('.') + 1, annotationValueToken.length());
String eventName = srcevt + "." + srccompid;
Object o = SpringUtil.getBean(srccompid);
if(o instanceof Component) {
Component c = (Component) o;
List<String> methodNames = eventsMap.get(eventName);
if(methodNames == null) {
methodNames = new ArrayList<String>();
methodNames.add(mdname);
eventsMap.put(eventName, methodNames);
} else {
methodNames.add(mdname);
eventsMap.put(eventName, methodNames);
}
comp.addEventListener(eventName, this);
((Component) o).addForward(srcevt, comp, eventName);
}
}
}
看到上面的
Object o = SpringUtil.getBean(srccompid);个人认为是从spring当中取bean来对比是否是Component。应该是从当前zul当中去取Component对象才对。
所以改这句为
Object o=comp.getFellow(srccompid);
再重新编译即可