2

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

并且能够以NewSpecies.java这种方式调用 Java 类:

    SpeciesManager speciesManager = (SpeciesManager) SpringUtil.getBean("speciesManager");      
    List<TaxonOccurrence> speciesList = speciesManager.findByScientificName(taxonomy, species, 1);

问题是,在这SpeciesManager.java里面有一个对其他 DAO 的调用,例如taxonDao,它创建了一个Null Pointer Exception. 我真的不知道这个异常是如何发生的。有什么帮助吗?taxonDao我也已经在我的 spring config xml中添加了这个。

4

1 回答 1

3

您拥有apply="org.openforis.specieseditor.NewSpecies"根组件,这意味着 ZK 将实例化您的 composer 实例,然后 Spring 没有机会注入依赖项,因为 composer 不是 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);
    }
}

或者您可以将您的 currentNewSpecies变成 Spring 托管 bean 并使用 EL 表达式apply="${newSpecies}"让 Spring 处理 NewSpecies bean 的生命周期(注意:确保 NewSpecies 具有原型范围)

于 2012-10-22T07:08:31.073 回答