使用EL表达式显示RedirectAttributes存放与FlashMap中的键值对

来源:互联网 发布:类似淘宝指数 编辑:程序博客网 时间:2024/05/18 04:57
spring mvc带参跳转(redirect:XXXX)时,常用ModelAndViewaddObject(key,value)方法。

但上面的方法存在问题,就是浏览器地址栏中将出现参数,如control?key=value&key=value,这样很不美观。

尤其在参数有中文时,还存在乱码的问题。

所以现在换了一种方法,使用RedirectAttributesaddFlashAttribute(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");

这样就能保证每次都取出上次的数据了,但更前面的历史数据则彻底没有了。

所以,在这里还要重申一下:如果有更好的解决方案,请一定要告诉我,谢谢!
0 0
原创粉丝点击