浏览 21131 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-20
想用跟正常的ModelAndView方式,但是用了RedirectView过去是拿不到的 ,如: new ModelAndView(new RedirectView("xxx.do"),"modelName",modelMap); 只能用Session这种方式 request.getSession().setAttribute("msg",map); 或URL后面加信息 new ModelAndView(new RedirectView("xxx.do?msg=xyz"); 然后在页面获取进行显示? 有没有更好的方法? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-20
cookie?
|
|
返回顶楼 | |
发表时间:2006-09-20
内部重新定向!用过滤器或者AOP,把当前的request覆盖掉要转向的controller里的request,然后执行那个controller,渲染页面!
那个页面就可以用你上一个controller里处理好的数据项了!(contriller里处理的atribute不能重名,否则就覆盖掉了) 或者适当改造spring mvc框架! |
|
返回顶楼 | |
发表时间:2006-09-20
in your controller:
new ModelAndView(new RedirectView("xxx.do"),"modelName",modelMap); then DispatcherServlet render the view with your modelMap: DispatcherServlet.render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response){ ... //call view's render method view.render(mv.getModelInternal(), request, response); } ... AbstractView.render(Map model, HttpServletRequest request, HttpServletResponse response){ ... //the model still here... renderMergedOutputModel(mergedModel, request, response); } RedirectView.renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response){ ... //Append query properties to the redirect URL. Here, the modelMap represented by url... appendQueryProperties(targetUrl, model, this.encodingScheme); //do redirect sendRedirect(request, response, targetUrl.toString(), this.http10Compatible); } 没有测试过, 看了下spring mvc的source code. 从上面的代码来看, new ModelAndView(new RedirectView("xxx.do"),"modelName",modelMap); 是可以的... 你应该Debug一下, 看看model在什么地方丢了... |
|
返回顶楼 | |
发表时间:2006-09-20
做了个测试, 证明我上面的判断是正确的...
而且也说明了,为什么你的方法拿不到正确的值 package com.simba.test; import java.util.HashMap; import java.util.Map; import junit.framework.TestCase; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; public class TestRedirectView extends TestCase{ protected MockHttpServletRequest request = new MockHttpServletRequest("GET", ""); protected MockHttpServletResponse response = new MockHttpServletResponse(); public void testRedirect() throws Exception{ Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value1"); map.put("key2", "value2"); //这种用法,map就是ModelAndView中的Model. ModelAndView mv = new ModelAndView(new RedirectView("/foo/bar.jsp"), map); //这里用getModel()与DispatcherServlet中用getModelInternal是一样的. mv.getView().render(mv.getModel(), request, response); assertEquals(response.getRedirectedUrl(),"/foo/bar.jsp?key1=value1&key2=value2"); } public void testWrongRedirect() throws Exception{ Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value1"); map.put("key2", "value2"); //这种用法,map就是ModelAndView中Model的一个key/value对了... ModelAndView mv = new ModelAndView(new RedirectView("/foo/bar.jsp"), "model", map); //这里用getModel()与DispatcherServlet中用getModelInternal是一样的. mv.getView().render(mv.getModel(), request, response); assertTrue(response.getRedirectedUrl().contains("/foo/bar.jsp?model=")); } } |
|
返回顶楼 | |
发表时间:2006-09-20
也就是无论用有modelName或无modelName的方式传递给ModelAndView,这些值是有都转化为URL进行表示了,只不过在页面上面无法通过通常的方式取得,如我用的JSTL 1.0.6标签:
<c:out value='${modelName}'/> <c:out value='${modelName.keyxxx}'/> 或 <c:out value='${keyxxx}'/> |
|
返回顶楼 | |
发表时间:2006-09-20
看到你的view才明白,你原来是想做这个...:)
这种情况下,你不应该用redirect. 而应该直接用 new ModelAndView("viewName",Model); 为什么一定要用redirect呢? |
|
返回顶楼 | |
发表时间:2006-09-20
区别在于F5不会现这个吧。
|
|
返回顶楼 | |
发表时间:2006-09-20
post and redirect
想要在两个请求之间传递信息,除了session, url transfer之外,还有很多手段啊: cookie cache database file ... 就靠你权衡了 |
|
返回顶楼 | |
发表时间:2006-09-20
表单重复提交的问题,不能直接用model来传了!只能用其他办法!
html的问题,没办法! |
|
返回顶楼 | |