日期:2014-05-17  浏览次数:20665 次

SSH一个简单的登录总是提出出错。。。求教。。
Service是这样写的:
public class LoginService implements school.service.LoginService {
private UserDAO userDao;

public void addUser(User user){
userDao.addUser(user);
}

public User login(String username, String password) {
String hql = "from User as u where u.username = ? and u.password = ?";
List<User> list = UserDAO.find(hql, new String[]{username, password});
if (list != null && list.size() > 0) {
User user = (User)list.get(0);
return user;
}
return null;
}

public UserDAO getUserDao() {
return userDao;
}

public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}

}


UserDAO是:

public interface UserDAO {
void addUser(User user);

List<User> find(final String hql, final Object[] values);
}

impl是:
public class UserDAO extends HibernateDaoSupport implements school.dao.UserDAO{

public void addUser(User user){
this.getHibernateTemplate().save(user);
}

public List find(final String hql, final Object[] values)
{
//通过HibernateCallback对象来执行查询
return getHibernateTemplate().find(hql, values);
}

}

这里的主要问题是
List<User> list = UserDAO.find(hql, new String[]{username, password});这句总提示
Cannot make a static reference to the non-static method find(String, Object[]) from the type UserDAO
求解,interface和impl都不能直接写成static,这个是不是涉及spring的注入啊。。。

------解决方案--------------------
List<User> list = UserDAO.find(hql, new String[]{username, password});这句总提示
Cannot make a static reference to the non-static method find(String, Object[]) 


find方法又不是static的,当然不能以类名.方法()这样来调用啊.你的代码应该是userDao这个对象吧,不是类类UserDAO,换成

List<User> list = userDao.find(hql, new String[]{username, password});这句总提示
Cannot make a static reference to the non-static method find(String, Object[]) 

至于注入,那是肯定需要的了
------解决方案--------------------
5楼的正解,你再在spring的配置文件中在用个<bean id='userDao' class="XX.XX.impl.UserDAOImpl">注入一下这个类