SSH2注入SessionFactory 空指针


最近用Spring+Hibernate+Struts2(SSH2)做项目

  • Action:存在Struts2的Action处理类;
  • Dao:一些与数据库打交道的接口;
  • Dao.Impl:Dao的实现类;
  • Service:Action依赖其调用Dao;
  • Service.Impl:Service的实现类;
  • Validation:用于验证。

现在弄用户注册:

Action.UserAction.java

package Action;

import java.io.PrintWriter;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import Bean.UserBean;
import Service.UserService;
import Validation.Validator;

import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<UserBean>
{
	@Resource private UserService service;
	private UserBean user = new UserBean();
	private String validateCode = "";//接收用户从浏览器传过来的验证码
	@Override public UserBean getModel()
	{
		return user;
	}
	public String regUser() throws Exception
	{
		
		if(Validator.validateCode(validateCode))
		{//验证码正确
			if(!Validator.userIsExist(user.getUsername()))
			{//用户不存在
				service.saveUser(user);
				return null;
			}
			message = "该用户已存在";
		}else
		{
			message = "验证码错误";
		}
		Gson gson = new Gson();
		message = gson.toJson(message);
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/json; charset=utf-8");
		response.setHeader("cache-control", "no-cache");
		
		PrintWriter out = response.getWriter();
		out.write(message);
		out.flush();
		out.close();
		return null;
	}
}


Dao.Impl.UserDaoImpl.java

package Dao.Impl;

import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import Bean.UserBean;
import Dao.UserDao;

@Transactional
@Repository("userDao")
public class UserDaoImpl implements UserDao
{
	@Resource private SessionFactory session;
	@Override
	public boolean userIsExist(String username)
	{
		UserBean user = (UserBean)session.getCurrentSession().createQuery("from UserBean where username=?").setParameter(0, username).uniqueResult();
		if(null != user)
		{//用户存在
			return true;
		}
		return false;
	}

}

Service.Impl.UserServiceImpl.java

package Service.Impl;

import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import Dao.UserDao;
import Service.UserService;

@Service("userService")
public class UserServiceImpl implements UserService
{
	@Resource private UserDao userDao;
	@Override
	public boolean userIsExist(String username)
	{
		return userDao.userIsExist(username);
	}
}

Validation.Validator.java

package Validation;

import java.util.Map;
import Service.UserService;
import Service.Impl.UserServiceImpl;
import com.opensymphony.xwork2.ActionContext;

public class Validator
{
	public static boolean validateCode(String validateCode)
	{
		Map<String, Object> session = ActionContext.getContext().getSession();
		if(validateCode.toLowerCase().equals(session.get("randomImg")))
		{
			return true;
		}
		return false;
	}
	//验证用户名是否存在
	public static boolean userIsExist(String username)
	{
		UserService userService = new UserServiceImpl();
		if(userService.userIsExist(username))
		{//用户存在
			return true;
		}
		return false;
	}
}

1、我用浏览器测试了一下,发现在 Dao.Impl.UserDaoImpl.java中的 SessionFactory注入不进去,报空指针错误。

2、然后我测试了一下Dao.Impl.UserDaoImpl.java中的其他方法,发现SessionFactory没有问题;那么说通过Struts使用是没有问题的。

3、然后我又不试图直接通过service调用userIsExist(String username)验证,跳过Validator.java,发现SessionFactory竟然注入成功!

那么说明在Validation.Validator.java这里卡住了,那我只能通过第三步去实现了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值