spring中多个页面之间值的传递

1. 在有的时候开发web应用可能存在着两种或者两种以上不用角色的用户,比如管理员与普通的用户两种角色,所以在管理者的页面修改了某些值之后需要将修改的值或者将某些需要显示的东西同步到普通用户在页面中显示出来,假如在控制器中使用HttpSession来进行值的传递的话那么session只能够在同一种角色的多个页面进行值的上设置与传递,像下面这样在控制器的一个方法中设置使用属性,并且在控制器的另外一个方法中将设置到session中的属性值拿出来,放在session中的可以是各种各样的对象,比如实体类对象,复合数据类型这些List、Map等等,但是这样的话只能够在一种角色使用在session中设置与取值,比如只能够在管理员处的多个页面进行值的传递,当退出管理员登录的时候那么session好像就会无效了,我使用输出语句打出来的session对象也是不一样的:

@RequestMapping(value = "/findFreeWorkers")
public String findFreeWorkers(Integer r_id, Integer w_id,String w_name,Integer pageIndex, Integer pageSize, Model model, HttpSession session) {
		PageInfo<Worker> di = workerService.findFreeWorkers(w_id,w_name,
				pageIndex, pageSize);
		model.addAttribute("di", di);
		session.setAttribute("curretEditDormRepID", r_id);
		session.setAttribute("dormRepID", r_id);
		return "Admin/FreeWorkers_list";
	}

	@RequestMapping( "/dispatchWork")
	@ResponseBody
	public String dispatchWork(Integer r_id, HttpSession session, HttpServletRequest request) {
		Integer curretEditDormRepID = (Integer) session.getAttribute("curretEditDormRepID");
		System.out.println("id : " + curretEditDormRepID);
		workerService.updateWorkerDispatch(r_id);
		workerService.updateRepairStatus(curretEditDormRepID);
		Integer dormRepID = (Integer) session.getAttribute("dormRepID");
		Map<Integer, Integer> isFinish = new HashMap<>();
		isFinish.put(dormRepID, r_id);
		ServletContext servletContext =  request.getSession().getServletContext();
		servletContext.setAttribute("isFinish", isFinish);
		session.setAttribute("isFinish", isFinish);
		return "FreeWorkers_list";
	}

可以发现在同一种角色退出登录之后另外一种角色登录的时候输出的session是不一样的

2. 解决方法:

使用HttpServletRequest进行值的设置与传递:request.getSession().getServletContext().setAttribute("");


public String dispatchWork(Integer r_id, HttpSession session, HttpServletRequest request)
...
Map<Integer, Integer> isFinish = new HashMap<>();
isFinish.put(dormRepID, r_id);
//设置值
ServletContext servletContext =  request.getSession().getServletContext();
servletContext.setAttribute("isFinish", isFinish);

...

//取值
Map<Integer, Integer> map = (Map<Integer, Integer>) request.getSession().getServletContext().getAttribute("isFinish");

可以发现两次输出的对象都是一样的那么就可以可以这种方法来进行值的传递

3. 此外还需要说的是在不同角色的页面之间ID的记录可以使用Map数据结构来记录这样在切换为另外一种角色的时候可以在控制器中修改数据库的某些值,并且Model只是将控制器中获取的值传递到jsp页面中,这样就可以在页面中使用el表达式取出值显示出来

发布了498 篇原创文章 · 获赞 133 · 访问量 50万+

猜你喜欢

转载自blog.csdn.net/qq_39445165/article/details/104545437