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方法贴看看