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

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");

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

所以,在这里还要重申一下:如果有更好的解决方案,请一定要告诉我,谢谢!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值