public class LoginAction extends ActionSupport implements ModelDriven<User>{
private static final long serialVersionUID = 1L;
private UserService userServer;
public UserService getUserServer() {
return userServer;
}
public void setUserServer(UserService userServer) {
this.userServer = userServer;
}
private User user =new User();
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
/**
* 登录
* @return
* @throws Exception
*/
public String login() throws Exception{
ActionContext con =ActionContext.getContext();
User u = new User();
u = userServer.login(user);
if(user!=null){
con.getSession().put("user", user);
return SUCCESS;
}else{
con.getSession().put("msg","用户名或密码不正确.");
return INPUT;
}
}
}
执行到u = userServer.login(user);一句 就报空指针.没分了。可以下载资源
解决方案
5
userService为空,当然会报错。
Action中的属性会在提交form表单时自动调用set+表单name这个方法
例如form表单提交了一个 name=”user” 的input表单,action会调用 setUser(user),并把input的值作为这个方法的输入传进来以初始化类属性。
而你的setUserService显然没有被调用,所以userService属性没有被初始化,NullPointerException
假如你用的是Spring的话,可以用注解的方式将这个类注入进来,写法如下:
@Autwired
private UserService userService;
Action中的属性会在提交form表单时自动调用set+表单name这个方法
例如form表单提交了一个 name=”user” 的input表单,action会调用 setUser(user),并把input的值作为这个方法的输入传进来以初始化类属性。
而你的setUserService显然没有被调用,所以userService属性没有被初始化,NullPointerException
假如你用的是Spring的话,可以用注解的方式将这个类注入进来,写法如下:
@Autwired
private UserService userService;
10
User类中的属性(setXXX,即去除set后将XXX首字母小写)必须和表单输入域中的name=”xxx”要一致,这样struts2框架才能自动将数据封装到对应的pojo中。
5
假如你提交的表单中没有userService相对应的属性的话,那么userService都没有初始化。假如你是搭配Spring做开发的话,那么你要把userService交给IOC容器管理,然后加个注解@autowire
5
login方法贴看看