首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用jsp cewolf标记库中的@Injected类时,Spring返回NullPointerException

当使用jsp cewolf标记库中的@Injected类时,Spring返回NullPointerException
EN

Stack Overflow用户
提问于 2013-11-15 14:33:27
回答 3查看 399关注 0票数 1

我对Spring很陌生,这让我很困惑。我尝试注入我的DAO实现,它在控制器类中工作,但是在另一个类中,当我使用完全相同的代码时,我得到了NullPointerException。

代码语言:javascript
复制
@Inject
private ResultCsvDAO res;
.
.
List<ResultRow> list = res.readResultToObjects();

最后一行给出了NullPointerExceprion。我已经在Spring文件中使用了所有的包。

代码语言:javascript
复制
<context:component-scan base-package="ptra.freecharts, ptra.controller, ptra.dao" />
<context:annotation-config />

知道我错过了什么或者做错了什么吗?

编辑。这是全班

代码语言:javascript
复制
package ptra.freecharts;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import ptra.dao.ResultCsvDAO;
import ptra.model.ResultRow;
import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;

@Service
public class DataProviderXY implements DatasetProducer, Serializable {
    private static final long serialVersionUID = 4755020363939818521L;

    private final Logger logger = LoggerFactory.getLogger(DataProviderXY.class);

    @Inject
    private ResultCsvDAO res;   

    public String getProducerId() {
        return "ptra.freecharts.XY";
    }
    public boolean hasExpired(
        Map arg0, Date arg1) {
        return false;
    }
    public Object produceDataset(Map arg0) throws DatasetProduceException {
        XYSeries dataset = new XYSeries("XY Dataset");      
        List<ResultRow> list = res.readResultToObjects();       
        for (int i=0; i<list.size(); i++) {
            dataset.add(i, list.get(i).getElapsed());
        }
        return new XYSeriesCollection(dataset); 
    }
}

DataProviderXY在jsp中被调用:

代码语言:javascript
复制
<jsp:useBean id="dataXY" class="ptra.freecharts.DataProviderXY" />
<cewolf:chart id="XYChart" title="Transaction response times" type="xy">
    <cewolf:gradientpaint>
        <cewolf:point x="0" y="0" color="#FFFFFF" />
        <cewolf:point x="300" y="0" color="#DDDDFF" />
    </cewolf:gradientpaint>
    <cewolf:data>
        <cewolf:producer id="dataXY" />
    </cewolf:data>
</cewolf:chart>
<cewolf:img chartid="XYChart" renderer="cewolf" width="640"
    height="500" />

编辑3。我接受了索提罗斯的回答,即使是强硬的,也有其他人是正确的。谢谢你的帮助,我真的很感激!

编辑4.我仍然在挣扎如何使用jsp cewolf标记库中的Spring。有什么建议怎么做吗?

编辑5,我终于让它起作用了。我遵循Sotiros的回答“在@Controller中插入...through点,并将其添加到模型中。”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-15 15:02:38

这个元素

代码语言:javascript
复制
<jsp:useBean id="dataXY" class="ptra.freecharts.DataProviderXY" />

与Spring完全无关,Servlet容器(jsp标记库)正在创建DataProviderXY类的实例并使用它。如果春天从来没有机会处理它,它就不能注入任何东西。

如果您正在使用Spring,那么让上下文直接或通过DataProviderXY中的@Inject点向您提供一个@Controller,并将其添加到Model中。

票数 2
EN

Stack Overflow用户

发布于 2013-11-15 14:35:06

您的@Inject注释来自哪个包?

Spring通常使用@Autowired,这是Spring的一部分。@javax.annotation.Resource也是由Spring处理的。

仅在Spring3中支持@javax.inject.Inject。您使用的是哪个版本的Spring?

如果使用Spring 3,则必须在Spring容器中定义一个类型为ResultCsvDAO的bean。这可以在XML配置文件中执行,也可以使用注释(例如@Component )执行。

另外,这个bean是您想要注入的吗,一个Spring管理的bean?

票数 0
EN

Stack Overflow用户

发布于 2013-11-15 14:39:59

控制反转和依赖注入是Spring的核心特性。只有当链中的所有bean都由Spring管理时,它才能保证依赖bean的自动注入和实例化。

为了回答您的具体问题,您要注入ResultCsvDAO res;的类并不是由Spring管理的。

当我说由Spring管理时,这意味着它必须由Spring实例化,Spring必须有关于这个类的信息。

如果这仍然没有帮助您,那么我相信您可以粘贴完整的类,我将能够解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20003434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档