当前位置: 代码迷 >> Java Web开发 >> ssh2 登陆提交表单出现空指针错误
  详细解决方案

ssh2 登陆提交表单出现空指针错误

热度:9941   发布时间:2013-02-25 21:16:40.0
ssh2 登陆提交表单出现空指针异常
null
2010-1-28 14:15:25 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
at com.test.action.LoginAction.execute(LoginAction.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

下面是LoginAction
public class LoginAction extends ActionSupport {
private Users user;
private UsersService userService;
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public UsersService getUserService() {
return userService;
}
public void setUserService(UsersService userService) {
this.userService = userService;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
System.out.println(user);
this.userService.login(user);
return SUCCESS; 
}



------解决方案--------------------------------------------------------
探讨
login.jsp

<body>
     <s:form action="login" >
  <s:textfield name="userName" label="用户名" />
  <s:password name="password" label="密码" />
  <s:submit value="登录" />
  </s:form>
   </body>

------解决方案--------------------------------------------------------
user是一个实例化的对象
你打印的是一个类,它打印出这个来应该是对的

System.out.println(user.userName); (如果这种写法不对的话换成System.out.println(user.getUserName()); )

这样应该就可以正确显示你的userName的值了
------解决方案--------------------------------------------------------
探讨
userSericeImpl:
 public boolean login(Users user) {
  this.usersDAO.findByExample(user);//你这个方法返回的是一个集合,你判断了吗?
  return true;//一直return true吗?那这个方法就没意义了
  }

 userDAOImpl:
 public List findByExample(Users user) {
  try {
  List results =this.getHibernateTemplate().findByExample(user);
  return results;
  } catch (RuntimeException re) {
  throw re;
  }
  }

------解决方案--------------------------------------------------------
是不是Spring配置文件中DAO没有实例化或者连库链接类没有注入进去?
------解决方案--------------------------------------------------------
<bean id="saveUsersActiom" class="com.test.action.SaveUsersAction">
<property name="usersService" ref="usersService"> </property>
</bean> 
=====================================
错了,这一个先不要改,保持原样
------解决方案--------------------------------------------------------
不是代码有错误,是你的逻辑有错误,
登陆之前,你先要到数据库中去除出user列表,然后 list.get(i)方法遍历,遍历出来的你进行封装,封装成User对象,进行判断:
String username = request.getParameter("username");
String password = request.getParameter("password");
 if(username.equals( user.getUserName()) && password .equals(user.getPassword() ) )
如果这些相等,则再进行登陆成功挑战


------解决方案--------------------------------------------------------
还有一个方法,重新设置你的Class , 让你的LoginAction继承一个基类 (BaseAction), 那个基类BaseAction再继承ActionSupport,实现ServletRequestAware,SessionAware,ServletResponseAware,这样比较好
在 BaseActionz中封装 一些属性 public HttpServletRequest request; public HttpServletResponse response;
  相关解决方案