最次換新東家。公司的管理系統用的是zk,而我又是喜歡使用spring的。
對于第一次使用zk,看了一次文檔后,就想使用其自身提供的zk與spring的組合了。
所有的配置也完成了,但在@EventHandler上就是不生效
添加的事件不啟動。看過源碼后。
發(fā)現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);
再重新編譯即可