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 がコンポーザー インスタンスをインスタンス化し、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);
    }
}

または、現在NewSpeciesを Spring マネージド Bean にして、EL 式を使用してapply="${newSpecies}"、Spring に NewSpecies Bean のライフサイクルを処理させることができます (注: NewSpecies にプロトタイプ スコープがあることを確認してください)。

于 2012-10-22T07:08:31.073 に答える