关于初步搭建完成SSH环境之后,JUnit test 测试成功,页面测试时:@Resource 注入的dao为null

这个问题研究了一天,还是因为配置的时候没有认真,一不小心,酿成了大错。当发现的时候感觉好尴尬啊::>_<::

CostAction:

复制代码
package com.tenni.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.tenni.dao.ICostDao;
import com.tenni.entity.Cost;

@Controller
@Scope("prototype")
public class CostAction {
    
    @Resource
    private ICostDao costDao;
    //input
    private int page = 1;
    private int pageSize;
    //output
    private String msg;
    private List<Cost> list;
    private int totalPage;
    
    public String findAll(){
        list = costDao.findAll();
        return "success";
    }
    //分页查询
    public String load(){
        list = costDao.findByPage(page, pageSize);
        totalPage = costDao.findTotalPage(pageSize);
        return "success";
    }
    
    /**
     * @return the msg
     */
    public String getMsg() {
        return msg;
    }

    /**
     * @param msg the msg to set
     */
    public void setMsg(String msg) {
        this.msg = msg;
    }

    /**
     * @return the list
     */
    public List<Cost> getList() {
        return list;
    }

    /**
     * @param list the list to set
     */
    public void setList(List<Cost> list) {
        this.list = list;
    }
    public ICostDao getCostDao() {
        return costDao;
    }
    public void setCostDao(ICostDao costDao) {
        this.costDao = costDao;
    }
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
}
复制代码

Struts.xml

复制代码
<!-- 公共的包,封装了通用的拦截器、通用的result -->
    <package name="interceptor" extends="json-default">
        <interceptors>
            <!-- 登录检查拦截器 -->
            <interceptor name="loginInterceptor"
                class="com.tenni.interceptor.LoginInterceptor" />
            <!-- 保持session开启拦截器 -->
            <interceptor name="openSessionInterceptor"
                class="com.tenni.interceptor.OpenSessionInViewInterceptor" />
            <!-- 登录检查拦截器栈 -->
            <interceptor-stack name="loginStack">
                <interceptor-ref name="loginInterceptor" />
                <interceptor-ref name="openSessionInterceptor" />
                <!-- 不要丢掉默认的拦截器栈,里面有很多Struts2依赖的拦截器 -->
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>
        <!-- 设置action默认引用的拦截器 -->
        <default-interceptor-ref name="loginStack" />
        <!-- 全局的result,包下所有的action都可以共用 -->
        <global-results>
            <!-- 跳转到登录页面的result -->
            <result name="toLogin" type="redirectAction">
                <param name="namespace">/login</param>
                <param name="actionName">toLogin</param>
            </result>
            <result name="error" type="redirectAction">
                <param name="namespace">/error</param>
                <param name="actionName">error</param>
            </result>
        </global-results>
    </package>
    <!-- cost action -->
    <package name="cost" namespace="/cost" extends="interceptor">
        <action name="findAll" class="costAction"
            method="findAll">
            <result name="success">
                /WEB-INF/main/cost.jsp
            </result>
        </action>
        <action name="findCost" class="costAction"
            method="load">
            <!-- 注入页容量 -->
            <param name="pageSize">3</param>
            <result name="success">
                /WEB-INF/main/find_cost.jsp
            </result>
        </action>
    </package>
复制代码

 

 

package----->cost extends---->interceptor(继承了json)

由于使用Spring来管理Action,因此需要通过Spring容器来创建Action,因此class属性指定的是组件的ID。

所以:

 <action name="findAll" class="costAction"中---> costAction 不能写成com.tenni.action.CostAction
 

 

posted @   gcjava  阅读(2730)  评论(0编辑  收藏  举报
编辑推荐:
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
阅读排行:
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 当职场成战场:降职、阴谋与一场硬碰硬的抗争
· ShadowSql之.net sql拼写神器
· Excel百万数据如何快速导入?
· 无需WebView,Vue也能开发跨平台桌面应用
点击右上角即可分享
微信分享提示