在spring mvc带参跳转(redirect:XXXX)时,常用ModelAndView的addObject(key,value)方法。
这样就很让人崩溃,如何使用EL表达式,也就是${key} 的方式取出值来。
但上面的方法存在问题,就是浏览器地址栏中将出现参数,如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={}]]”
经过反复的查找和测试
“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");
这样就能保证每次都取出上次的数据了,但更前面的历史数据则彻底没有了。
所以,在这里还要重申一下:如果有更好的解决方案,请一定要告诉我,谢谢!