使用zkoss,为什么我的Spring DAO仍然为null,即使我已经在Spring配置XML中设置了它?

时间:2012-10-22 06:43:43

标签: zk

我正在使用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

1 个答案:

答案 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具有原型范围)