使用EL表达式显示RedirectAttributes存放与FlashMap中的键值对
2016-08-04 10:49
579 查看
在spring
mvc带参跳转(redirect:XXXX)时,常用ModelAndView的addObject(key,value)方法。
但上面的方法存在问题,就是浏览器地址栏中将出现参数,如control?key=value&key=value,这样很不美观。
尤其在参数有中文时,还存在乱码的问题。
所以现在换了一种方法,使用RedirectAttributes的addFlashAttribute(key,value)方法,这样参数将存储在session中,不会直接显示在浏览器的地址栏上。
但有得必有失,使用了上面的方式,通过查找session中的内容知道,
存储的key是“org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS”,
value是“FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}]”
value也可能是多个数据,如
“[FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}],
FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}],
FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}]]”
这样就很让人崩溃,如何使用EL表达式,也就是${key} 的方式取出值来。
经过反复的查找和测试
“springmvc重定向后jsp如何获取其中的flashAttribute?”“http://blog.csdn.net/zzg1229059735/article/details/51566563”
这篇帖子给了很大的启发。
可以使用
${sessionScope['org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS'][0][key]}
的方式 取出value的值。
但是,问题还没有结束。
这里面有个[0]的存在,所以数据肯定是多维的数组,测试一下的结果,果然如此。
那么怎么通过EL表达式,取出最后一次输入的结果?(例如用户登录错误后,带用户名参数的返回网站默认页)
经过来回的EL表达式测试,实在找不到好的办法了,于是就把主意打到了Controller中。(如果有更好的解决方案,请一定要告诉我,谢谢!)
现在采用的方式,就是在调用RedirectAttributes的addFlashAttribute(key,value)方法前,将session中key为“org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS”的数据都清除掉。
session.removeAttribute("org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS");
这样就能保证每次都取出上次的数据了,但更前面的历史数据则彻底没有了。
所以,在这里还要重申一下:如果有更好的解决方案,请一定要告诉我,谢谢!
mvc带参跳转(redirect:XXXX)时,常用ModelAndView的addObject(key,value)方法。
但上面的方法存在问题,就是浏览器地址栏中将出现参数,如control?key=value&key=value,这样很不美观。
尤其在参数有中文时,还存在乱码的问题。
所以现在换了一种方法,使用RedirectAttributes的addFlashAttribute(key,value)方法,这样参数将存储在session中,不会直接显示在浏览器的地址栏上。
但有得必有失,使用了上面的方式,通过查找session中的内容知道,
存储的key是“org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS”,
value是“FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}]”
value也可能是多个数据,如
“[FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}],
FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}],
FlashMap [attributes={key=valuet, key=value}, targetRequestPath=/HFXJv2.0/index.jsp, targetRequestParams={}]]”
这样就很让人崩溃,如何使用EL表达式,也就是${key} 的方式取出值来。
经过反复的查找和测试
“springmvc重定向后jsp如何获取其中的flashAttribute?”“http://blog.csdn.net/zzg1229059735/article/details/51566563”
这篇帖子给了很大的启发。
可以使用
${sessionScope['org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS'][0][key]}
的方式 取出value的值。
但是,问题还没有结束。
这里面有个[0]的存在,所以数据肯定是多维的数组,测试一下的结果,果然如此。
那么怎么通过EL表达式,取出最后一次输入的结果?(例如用户登录错误后,带用户名参数的返回网站默认页)
经过来回的EL表达式测试,实在找不到好的办法了,于是就把主意打到了Controller中。(如果有更好的解决方案,请一定要告诉我,谢谢!)
现在采用的方式,就是在调用RedirectAttributes的addFlashAttribute(key,value)方法前,将session中key为“org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS”的数据都清除掉。
session.removeAttribute("org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS");
这样就能保证每次都取出上次的数据了,但更前面的历史数据则彻底没有了。
所以,在这里还要重申一下:如果有更好的解决方案,请一定要告诉我,谢谢!
相关文章推荐
- asp.net中Response.Redirect与Server.Transfer的区别分析
- iis下设置301 Redirect 永久重定向的方法
- 关于shopex同步ucenter的redirect问题,导致script不运行
- 三种方法让Response.Redirect在新窗口打开
- Nginx设置重定向跳转
- Spring整合Dwr,Cannot locate BeanDefinitionParser for element [annotation-scan]
- 自定义错误--Apache
- JSP中forward和redirect有什么区别? 什么时候必须用哪个?
- spring3 MVC手工搭建Spring3项目demo
- spring mvc 开发需要的jar包的用途详解
- 基于注解的 Spring MVC 简单入门-网摘
- [MVC] 深入浅出Spring MVC
- XingXingMVC页面跳转处理
- Resolving Views
- JSTL详解
- Redirect on Spring MVC Example
- Nginx配置多个证书
- spring mvc的web.xml的配置
- struts配置文件
- forward和redirect的区别