博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring跨重定向传递数据
阅读量:4840 次
发布时间:2019-06-11

本文共 2059 字,大约阅读时间需要 6 分钟。

spring跨重定向传递数据

为何要重定向?

作用之一:防止表单重复提交

如何重定向?

// 在控制器方法返回的视图名称中,以redirect:开头的String不是用来查找视图的,而是用来指导浏览器进行重定向的路径return "redirect:/spitter/" + spitter.getUsername();

重定向丢数据

1005988-20190506153407344-1518492989.png

显然,对于重定向来说,模型并不能用来传递数据。

重定向如何传递数据?

  • 使用URL模板以路径变量和/或查询参数的形式传递数据;
  • 通过flash属性发送数据;
通过URL模板进行重定向

通过连接String的方式:

@RequestMapping(value="/register", method=RequestMethod.POST)public String processRegistration( @RequestPart("profilePicture") MultipartFile profilePicture, @Valid Spitter spitter,Errors errors,HttpServletRequest http) throws Exception{profilePicture.transferTo(new File("/data/spittr/" + profilePicture.getOriginalFilename()));if(errors.hasErrors()) {return "registerForm";}spitterRepository.save(spitter);return "redirect:/spitter/" + spitter.getUsername();}// 当构建url或sql查询语句的时候,使用String拼接不安全

模板方式:

@RequestMapping("/tiles")    public String hello (Model model)    {        model.addAttribute("name", "yangdong");         model.addAttribute("sex", "men");        model.addAttribute("age", "18");       return "redirect:/test/{name}";    }

因为模型中的sex和age属性没有匹配重定向URL中的任何占位符,所以它会自动以查询参数的形式附加到重定向URL上。

结果得到的重定向URL路径将会是: test/yangdong?sex=men&age=18

小结:通过路径变量和查询参数的形式跨重定向传递数据是很简单直接的形式,但是它只能用来发送简单的值,例如String和数字的值。

使用flash属性

有个方案是将对象放到会话(session)中。会话能够长期存在,并且能够跨多个请求。所以我们能在重定向发送之前将对象放到会话中,并在重定向后,从会话中将其取出。当然,我们还要负责在重定向后再会话中将其清理掉。 实际上,Spring也认为将跨重定向存活的数据放到会话中是一个很不错的选择。但是,Spring认为我们并不需要管理这些数据,相反,Spring提供了将数据发送为flash属性的功能。按照定义,flash属性会一直携带这些数据直到下一次请求,然后才会消失。

@RequestMapping(value="/register", method=RequestMethod.POST)public String processRegistration( @RequestPart("profilePicture") MultipartFile profilePicture, @Valid Spitter spitter,Errors errors,Model model) throws Exception{    profilePicture.transferTo(new File("/data/spittr/" +profilePicture.getOriginalFilename()));    if(errors.hasErrors())     {    return "registerForm";    }    spitterRepository.save(spitter);    model.addAttribute("username", spitter.getUsername());    model.addAttribute("password",spitter.getPassword());    return "redirect:/spitter/{username}";}

1005988-20190506153413221-555248082.png

转载于:https://www.cnblogs.com/heliusKing/p/10819907.html

你可能感兴趣的文章
automation(一)
查看>>
多个参数
查看>>
AI-Info-Micron-Insight:用内存解决方案演化神经网络智能
查看>>
杂项-Class:Class
查看>>
杂项:基金会
查看>>
[NOI2015]软件包管理器 树链剖分 + 线段树
查看>>
android手机号和密码输入框的一个范例
查看>>
socket套接字
查看>>
HBase表基本操作,读取和写入
查看>>
kendo-ui下拉树形选择(DropDownTreeView)
查看>>
TDDL DataSource
查看>>
第八周感想
查看>>
[资源共享]C#+AE构建GIS桌面端应用系统框架-全代码
查看>>
如何自定义添加微信公众号消息模版
查看>>
前端面试题总结(二)CSS篇
查看>>
sharepoint_study_8
查看>>
Win10配置MySQL8.0.15免安装版教程
查看>>
LeetCode 题目总结/分类
查看>>
LeetCode -- Valid Anagram
查看>>
mochiweb 源码阅读(七)
查看>>