SSH2注入SessionFactory 空指针

来源:互联网 发布:windows gcc下载 编辑:程序博客网 时间:2024/06/06 02:04


最近用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;@Overridepublic 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;@Overridepublic 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这里卡住了,那我只能通过第三步去实现了。


原创粉丝点击