Action中为什么不调用Service里面的方法

J2EE 码拜 4年前 (2017-04-11) 371次浏览
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;

10

User类中的属性(setXXX,即去除set后将XXX首字母小写)必须和表单输入域中的name=”xxx”要一致,这样struts2框架才能自动将数据封装到对应的pojo中。

5

假如你提交的表单中没有userService相对应的属性的话,那么userService都没有初始化。假如你是搭配Spring做开发的话,那么你要把userService交给IOC容器管理,然后加个注解@autowire

5

login方法贴看看

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Action中为什么不调用Service里面的方法
喜欢 (0)
[1034331897@qq.com]
分享 (0)