我正在使用ZK尝试从现有的Spring JAR项目中调用Spring Manager / DAO。我已经在zul文件中使用了这个变量解析器:
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<window border="normal" width="400px" style="padding-top:20px;padding-left:20px;" title="Species Editor" apply="org.openforis.specieseditor.NewSpecies">
能够以这种方式调用Java类NewSpecies.java
:
SpeciesManager speciesManager = (SpeciesManager) SpringUtil.getBean("speciesManager");
List<TaxonOccurrence> speciesList = speciesManager.findByScientificName(taxonomy, species, 1);
问题是,在SpeciesManager.java
内,有一个对其他DAO的调用,例如taxonDao
,它会创建一个Null Pointer Exception
。我真的不知道这个异常是如何发生的。有帮助吗?我已经在我的spring config xml中添加了这个taxonDao
。
答案 0 :(得分:3)
你的根组件上有apply="org.openforis.specieseditor.NewSpecies"
,这意味着ZK将实例化你的作曲家实例,然后Spring没有机会注入依赖,因为这里的作曲家不是Spring托管bean。您可以通过从SelectorComposer和VariableResolver注释扩展来在作曲家中注入Spring依赖项,如下所示
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class RegistrationSpringComposer extends SelectorComposer<Component> {
@WireVariable
private RegistrationDao registrationDao;
@Listen("onClick = #submitButton")
public void submit(){
// omit irrelevant code for brevity
registrationDao.add(newUser);
}
}
OR
您可以将当前NewSpecies
转换为Spring托管bean并使用EL表达式(如apply="${newSpecies}"
)让Spring处理NewSpecies bean的生命周期(注意:确保NewSpecies具有原型范围)