Java zk+;Springbean,@resource的空指针

Java zk+;Springbean,@resource的空指针,java,spring,zk,Java,Spring,Zk,我已经将我的应用程序从zk 5.0升级到zk 6.5,重新运行应用程序后SpringBean为空,请帮助,下面是代码: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=

我已经将我的应用程序从zk 5.0升级到zk 6.5,重新运行应用程序后SpringBean为空,请帮助,下面是代码:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">

<description>Application</description>
<display-name>Application</display-name>
<!-- Spring -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>

<!-- Spring configuration -->
<!-- Initialize spring context -->
<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<!-- ZK -->
<listener>
    <description>ZK listener for cleanup when a session is destroyed</description>
    <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
</listener>
我发现如果我使用 CategoryService CategoryService=(CategoryService)SpringUtil.getBean(“CategoryService”); 而不是@Resource CategoryService CategoryService

但是我想保留我的旧代码,有人能告诉我旧代码出了什么问题吗,它在ZK5.0中工作?zk升级后,Springbean似乎被忽略了。

您需要使用以下内容对类进行注释:

@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
然后:

@WireVariable
CategoryService categoryService;
嗯,还有一个肮脏的把戏(这是一个基本VM,但也适用于控制器):

然后您仍然可以使用
@Inject


旁注:请仅将此作为一个快速解决方案,并尝试找出自动布线在空闲时间不工作的真正问题。
我这样说是因为普通的
@wirelaviable
是连接SpringBean的唯一最佳方式

查找解决方案:

尝试将
@组件
更改为
@服务
@存储库
,查看您是否仍然获得空指针,或删除指定给它的名称。

我知道文档中清楚地提到了
@Component
,但也有可能出现bug。

粘贴StackTrace您的zk spring版本是什么?我没有使用zk spring。我导入了spring.jar版本2.5.6I,并将我的SearchController更新为以下版本,仍然是空指针异常@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)公共类SearchController扩展AbstractController@WireVariable(“categoryService”)categoryService categoryService;只有将其更新为CategoryService CategoryService=(CategoryService)SpringUtil.getBean(“CategoryService”);有人能帮忙吗?您错过了链接中描述的web.xml中的第二个侦听器。抱歉,我忘了说,我已将这两个侦听器都添加到web.xml中。但还是有一个例外。
package com.dc.myapplication.controller;

import javax.annotation.Resource;

public class SearchController extends AbstractController implements PaginationListener, RfiCategoryState {

    private static final String STATE = "state";

    @Resource CategoryService categoryService;

    @Override
    protected void initialise() {

        populateCategories();
    }

    private void populateCategories() {
        for (RfiCategory category : categoryService.getCategories()) {
            categories.appendChild(rfiCategoryRenderer.renderRadioSelector(category, this));
        }
    }
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
@WireVariable
CategoryService categoryService;
public AbstractVM() {
    this.autowire(this);
}

protected final void autowire(Object object) {
    this.getApplicationContext().getAutowireCapableBeanFactory()
            .autowireBean(object);
    this.getApplicationContext().getAutowireCapableBeanFactory()
            .initializeBean(object, null);
}