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 
... 
就靠你权衡了

spring mvc 请求转发和重定向

spring mvc3中的addFlashAttribute方法 url: http://www.software8.co/wzjs/java/2943.html   记得在spring mvc...
  • jackpk
  • jackpk
  • 2014年02月12日 16:15
  • 342430

springmvc之redirect重定向

java类中跳转链接的方式有两种一种是forword,一种是redirect。 forword是请求服务器资源,是服务器直接访问目标地址的url,把url相应的信息返回给浏览器。然而浏览器并不知道u...
  • u013465878
  • u013465878
  • 2016年01月09日 16:16
  • 1457

SpringMVC Redirect 跳转后保存Model中的数据

在做项目编码时,几乎都不可避免的要用到Redirect跳转并保存其中的参数。例如下面的需求: 在用户的列表页面删除一个用户,在删除后仍停留在列表页面,但是要显示删除成功或者相应的错误信息。 ...
  • lcczzu
  • lcczzu
  • 2015年06月26日 16:42
  • 2533

Springmvc 在同一个controller和不同的controller中进行重定向redirect和转发forward:

redirect  forward 在同一个controller之间进行重定向:redirect 1、我们的请求在同一个controller之间进行重定向具体代码如下: 2、实例:   前台代码:...
  • QH_JAVA
  • QH_JAVA
  • 2015年04月03日 08:56
  • 22398

SpringMVC——redirect重定向跳转传值

spring MVC框架controller间跳转,需重定向。有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示。      首先先来介绍一下不带参数的重定向: ...
  • z69183787
  • z69183787
  • 2016年09月20日 16:04
  • 12725

如何用Java类配置Spring MVC(不通过web.xml和XML方式)

建立普通MAVEN项目配置POM
  • ko0491
  • ko0491
  • 2017年02月23日 15:35
  • 337

spring mvc中redirect/forward:url与拦截器的关系

spring控制器最后返回一个ModelAndView(urlName),其中urNamel可以是一个视图名称,由视图解析器负责解析后将响应流写回客户端;也可以通过redirect/forward:u...
  • kjfcpua
  • kjfcpua
  • 2012年03月28日 10:41
  • 6563

使用Httpclient调用url方式访问spring mvc中的controller并传json值与返回

使用Httpclient调用url方式访问spring mvc中的controller并传json值与返回 1.前面一篇博客已经提到使用HttpURLConnection调用url,本文讲的是使用H...
  • qq_31968809
  • qq_31968809
  • 2017年03月11日 12:22
  • 506

使用HttpURLConnection调用url方式访问spring mvc中的controller并传json值与返回

使用HttpURLConnection调用url方式访问spring mvc中的controller并传json值与返回 1.目标:使用HttpURLConnection调用url方式访问spring...
  • qq_31968809
  • qq_31968809
  • 2017年03月09日 19:48
  • 303

Spring MVC中action接收从页面传递过来的参数方式

通过url中的“?”从页面传递一个数组到后台,
  • u012286237
  • u012286237
  • 2014年07月16日 11:18
  • 608
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring MVC中redirect到一个页面,同时带些信息过去进行显示,但是不通过Session方式及URL方式
举报原因:
原因补充:

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