简单做了一下登陆功能,用S1SH做的,但是登陆输入正确的用户名密码的时候,出现空指针    sql语句  Hibernate: select users0_.id as col_0_0_ from users users0_ where users0_.UserName is null
代码如下:
UsersDAOImpl中的方法
public boolean CheckLogin(Users user) {
Users user1 = null;
if(user!=null){
session = DBUtils.getSession();
hql = "select u from Users u where UserName ="+user.getUserName();

}
try {

query = session.createQuery(hql);
iterator = query.iterate();
while(iterator.hasNext()){
user1 = (Users)iterator.next();
}
} catch (HibernateException e) {
e.printStackTrace();
}
boolean isExist = false;
if(user1!=null){
isExist = true;
}
return isExist;
}
UserBiz中调用 package com.leeyas.Biz;import com.leeyas.DAO.UsersDAO;
import com.leeyas.pojo.Users;public class UsersBiz { //实例化DAO层实体
private UsersDAO userDAO;

public UsersDAO getUserDAO() {
return userDAO;
} public void setUserDAO(UsersDAO userDAO) {
this.userDAO = userDAO;
} //调用Dao层的验证用户登陆的方法
public boolean checUser(Users user){
return userDAO.CheckLogin(user);
}
}action中调用usersbizpackage com.leeyas.actions;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.leeyas.Biz.UsersBiz;
import com.leeyas.forms.UsersForm;
import com.leeyas.pojo.Users;public class UsersAction extends Action {

private UsersBiz usersbiz ; public UsersBiz getUsersbiz() {
return usersbiz;
} public void setUsersbiz(UsersBiz usersbiz) {
this.usersbiz = usersbiz;
} public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UsersForm uf = (UsersForm)form;
Users user = new Users();
user.setUserName(uf.getUserName());
user.setPassword(uf.getPassword());
BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");
UsersBiz userbiz = (UsersBiz)bf.getBean("UsersBiz");
if(userbiz.checUser(user)){
HttpSession session = request.getSession();
session.setAttribute("User", user);
return mapping.findForward("success");
}
request.setAttribute("error", "用户名密码错误");
return mapping.findForward("login");
}
}applicationcontext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>           

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- DAO -->
<bean id="Userdao" name="Userdao" class="com.leeyas.DAO.UsersDAOImpl"/>   

<!-- Biz -->  
<bean id="UsersBiz" class="com.leeyas.Biz.UsersBiz">
<property name="userDAO">
<ref bean="Userdao"/>
</property>
</bean>

<!-- Action -->
<bean id="UsersAction" name="/UsersAction"
class="com.leeyas.actions.UsersAction">
<property name="usersbiz">
<ref bean="UsersBiz" />
</property>
</bean>
           </beans>

解决方案 »

  1.   

    你想用Spring注入就需要对UserDAO进行抽取接口
      

  2.   

    已经抽象了啊,
    dao层
    package com.leeyas.DAO;import org.hibernate.Query;import com.leeyas.pojo.Users;public interface UsersDAO {

    public void add(Users user);

    public Users FindByID(int id);

    public Query find(Users user);

    public boolean delete(Users user);

    public boolean update(int id,Users user);

    public Users CheckLogin(Users user);}
      

  3.   

    要将Users对象注入到spring吗?
      

  4.   

    我的actionform
    package com.leeyas.forms;import org.apache.struts.action.ActionForm;import com.leeyas.pojo.Users;public class UsersForm extends ActionForm { private Users user = new Users();

    public Users getUser() {
    return user;
    } public void setUser(Users user) {
    this.user = user;
    }
    }
      

  5.   

    你的UsersForm 中没有getUserName()这个方法,
    不知道你的user.setUserName(uf.getUserName()); 是怎么得来的
      

  6.   

    貌似get/set方法里边没属性,只有一个User 类属性!