0

Spring (Spring MVC) と Hibernate の両方の最新バージョンを使用するプロジェクトに取り組んでいます。フロントエンドには Zk 6.5.0 を使用しています。問題は次のとおりです。

次のようなコントローラーがあります。

public class SearchController extends SelectorComposer<Component> {

    private static final long serialVersionUID = 1L;

    @WireVariable("MjestaAutoComplete")
    private AutoComplete<Mjesta> mjesta;

    @Listen("onChanging = #mj")
    public void autocomplete(InputEvent event) {    

        if (mjesta == null) {
            Messagebox.show("Mjesta == Null");
            return;
        } else {
            mjesta.doSomething();
        }            

    }

}

Zul ページは次のようになります。

<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
    <div apply="hr.restart.erp.web.controller.SearchController">
            <combobox id="mj" autocomplete="true" autodrop="true" />
    </div>
</zk>

ZK JSP タグを使用した jsp (関連部分のみ) は次のとおりです。

<z:variable-resolver use="org.zkoss.zkplus.spring.DelegatingVariableResolver" />
<z:page>
     <z:div apply="hr.restart.erp.web.controller.SearchController">
        <z:combobox id="mj" autocomplete="true" autodrop="true"></z:combobox>
     </z:div>
</z:page>

jsp の include ディレクティブ コードによって jsp に zul ページをインクルードすると、「mjesta」が null ではない正常に実行されます。ディレクティブを削除し、代わりに zk jsp タグを使用すると、「mjesta」オブジェクトが null になります。コードが同一である場合、これはどのように可能でしょうか? これを自分自身に説明できる唯一の方法は、「mjesta」が自動配線されていないということですが、それはあまり意味がありません...誰かこれを理解できますか?

4

3 に答える 3

1

doAfterCompose() で手動で Selectors.wireVariables() を呼び出します

public class SearchController extends SelectorComposer {

    public void doAfterCompose(Component comp) throws Exception {

        super.doAfterCompose(comp);
        Selectors.wireVariables(getPage(), this, _resolvers);

    }

}

于 2012-12-25T06:39:18.797 に答える
1

コメントを読んで、書くと思います

public SearchController(){
  AutoComplete<Mjesta> mjesta = SpringUtil.getBean("MjestaAutoComplete");
}

mjestanull にはなりませんよね?
この動作の理由に関係なく、これで問題が解決するはずです。 しかし、VariableResolverが適切な場所で
呼び出されないように、理由は構成にあるはずだと思います。zk doc
と比較して構成を確認することをお勧めします。

于 2012-12-22T00:34:48.603 に答える
0

これはバグだと思います。

ここでZK にチケットを送信しました。

ZUL または ZKJSP への依存関係をできるだけ取り除くことで、VariableResolver 全体で問題を再現することができました。

MyVariableResolver私は次のように作成しました:

public class MyVariableResolver implements VariableResolver {

    @Override
    public Object resolveVariable(String name) throws XelException {
        System.out.println("Resolving variable: " + name);
        return null;
    }

}

そして、それを次のMyControllerように添付しました:

@VariableResolver(MyVariableResolver.class)
public class MyController extends SelectorComposer<Component> {

    private static final long serialVersionUID = 1L;

    @WireVariable
    public Object wireMePlease;

}

ZUL ファイルは単純に次のようになります。

<div apply="MyController"/>

ZKJSP ファイルは次のとおりです。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.zkoss.org/jsp/zul" prefix="z"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <body>
        <z:page>
            <z:div apply="MyController"/>
        </z:page>
    </body>
</html>

ZUL ファイルが評価さMyVariableResolverれると、 fetch が呼び出されwireMePleaseます。

ただし、ZKJSP ファイルが評価されるときは呼び出さMyVariableResolverれません。

于 2012-12-22T22:11:42.237 に答える