Spring MVC中redirect到一个页面,同时带些信息过去进行显示,但是不通过Session方式及URL方式

转载 2012年03月28日 10:37:05
如何在Spring MVC中redirect到一个页面,同时带些信息过去进行显示,但是不通过Session方式及URL方式? 

想用跟正常的ModelAndView方式,但是用了RedirectView过去是拿不到的 ,如: 
Java代码  收藏代码
  1. new ModelAndView(new RedirectView("xxx.do"),"modelName",modelMap);   

只能用Session这种方式 
Java代码  收藏代码
  1. request.getSession().setAttribute("msg",map);  

或URL后面加信息 
Java代码  收藏代码
  1. new ModelAndView(new RedirectView("xxx.do?msg=xyz");  

然后在页面获取进行显示? 

有没有更好的方法?





in your controller: 
Java代码  收藏代码
  1. new ModelAndView(new RedirectView("xxx.do"),"modelName",modelMap);   


then DispatcherServlet render the view with your modelMap: 
Java代码  收藏代码
  1. DispatcherServlet.render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response){  
  2. ...  
  3. //call view's render method  
  4. view.render(mv.getModelInternal(), request, response);  
  5. }  
  6. ...  
  7.   
  8. AbstractView.render(Map model, HttpServletRequest request, HttpServletResponse response){  
  9. ...  
  10. //the model still here...  
  11. renderMergedOutputModel(mergedModel, request, response);  
  12. }  
  13.   
  14. RedirectView.renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response){  
  15. ...  
  16. //Append query properties to the redirect URL. Here, the modelMap represented by url...  
  17. appendQueryProperties(targetUrl, model, this.encodingScheme);  
  18.   
  19. //do redirect  
  20. sendRedirect(request, response, targetUrl.toString(), this.http10Compatible);  
  21. }  


没有测试过, 看了下spring mvc的source code. 
从上面的代码来看, 
Java代码  收藏代码
  1. new ModelAndView(new RedirectView("xxx.do"),"modelName",modelMap);   

是可以的... 

你应该Debug一下, 看看model在什么地方丢了...



做了个测试, 证明我上面的判断是正确的... 
而且也说明了,为什么你的方法拿不到正确的值 
Java代码  收藏代码
  1. package com.simba.test;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import junit.framework.TestCase;  
  7.   
  8. import org.springframework.mock.web.MockHttpServletRequest;  
  9. import org.springframework.mock.web.MockHttpServletResponse;  
  10. import org.springframework.web.servlet.ModelAndView;  
  11. import org.springframework.web.servlet.view.RedirectView;  
  12.   
  13. public class TestRedirectView extends TestCase{  
  14.       
  15.     protected MockHttpServletRequest request = new MockHttpServletRequest("GET""");  
  16.     protected MockHttpServletResponse response = new MockHttpServletResponse();  
  17.   
  18.     public void testRedirect() throws Exception{  
  19.         Map<String, String> map = new HashMap<String, String>();  
  20.         map.put("key1""value1");  
  21.         map.put("key2""value2");  
  22.           
  23.         //这种用法,map就是ModelAndView中的Model.  
  24.         ModelAndView mv = new ModelAndView(new RedirectView("/foo/bar.jsp"), map);  
  25.           
  26.         //这里用getModel()与DispatcherServlet中用getModelInternal是一样的.  
  27.         mv.getView().render(mv.getModel(), request, response);  
  28.           
  29.         assertEquals(response.getRedirectedUrl(),"/foo/bar.jsp?key1=value1&key2=value2");  
  30.     }  
  31.       
  32.     public void testWrongRedirect() throws Exception{  
  33.         Map<String, String> map = new HashMap<String, String>();  
  34.         map.put("key1""value1");  
  35.         map.put("key2""value2");  
  36.           
  37.         //这种用法,map就是ModelAndView中Model的一个key/value对了...  
  38.         ModelAndView mv = new ModelAndView(new RedirectView("/foo/bar.jsp"), "model", map);  
  39.           
  40.         //这里用getModel()与DispatcherServlet中用getModelInternal是一样的.  
  41.         mv.getView().render(mv.getModel(), request, response);  
  42.           
  43.         assertTrue(response.getRedirectedUrl().contains("/foo/bar.jsp?model="));  
  44.     }  
  45. }  




也就是无论用有modelName或无modelName的方式传递给ModelAndView,这些值是有都转化为URL进行表示了,只不过在页面上面无法通过通常的方式取得,如我用的JSTL 1.0.6标签: 
Java代码  收藏代码
  1. <c:out value='${modelName}'/>  
  2. <c:out value='${modelName.keyxxx}'/>  

或 
Java代码  收藏代码
  1. <c:out value='${keyxxx}'/>  




post and redirect 
想要在两个请求之间传递信息,除了session, url transfer之外,还有很多手段啊: 
cookie 
cache 
database 
file 
... 
就靠你权衡了

相关文章推荐

EasyUI+SpringMVC配置session过期跳转页面

问题描述在开发过程中,session过期是常见的,当session过期我们就能看到登录信息为null,这种问题最常见的处理方法就是判断session是否过期,如果过期跳转到登陆页面。这篇博客分享一下在...

淘淘商城系列——商品类目选择的实现

毛主席讲过:“会当水击三千里,自信人生两百年”。当我们实现商品列表查询这个功能之后,我相信大家都信心倍增,但这只是走完万里长征的第一步,后面还有嵩山峻岭需要我们不懈攀登,所以千万不可懈怠人生。本文我就...

MySQL5.7安装与配置(YUM)

原文链接:http://blog.csdn.net/xyang81/article/details/51759200安装环境:CentOS7 64位 MINI版,安装MySQL5.71、配置YUM源在...

Spring mvc redirect 传递参数乱码

本人最近在学习Spring mvc 3.0.5,最近遇到一个问题一直在困扰着我。  我的一个请求  blog/id/top执行后(get请求),重定向到blog/list,如下  ret...

DetachedCriteria用法

http://uule.iteye.com/blog/947923转载 在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQ...

Criteria和DetachedCriteria

先看一个比较经典且易懂的例子: DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class, "b").;//加...

JAVA用户自定义事件监听完整例子

很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下:package demo;import java.util.EventObject;...

Hibernate中DetachedCriteria和Criteria的完整用法

最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法        设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)