2006-09-20
Spring MVC中redirect到一个页面,同时带些信息过去进行显示,但是不通过Session方式及URL方式?
关键字: Spring MVC redirect Session URL
如何在Spring MVC中redirect到一个页面,同时带些信息过去进行显示,但是不通过Session方式及URL方式?
想用跟正常的ModelAndView方式,但是用了RedirectView过去是拿不到的 ,如:
只能用Session这种方式
或URL后面加信息
然后在页面获取进行显示?
有没有更好的方法?
想用跟正常的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");
然后在页面获取进行显示?
有没有更好的方法?
评论
galaxystar
2006-09-20
表单重复提交的问题,不能直接用model来传了!只能用其他办法!
html的问题,没办法!
html的问题,没办法!
sorphi
2006-09-20
post and redirect
想要在两个请求之间传递信息,除了session, url transfer之外,还有很多手段啊:
cookie
cache
database
file
...
就靠你权衡了
想要在两个请求之间传递信息,除了session, url transfer之外,还有很多手段啊:
cookie
cache
database
file
...
就靠你权衡了
YuLimin
2006-09-20
区别在于F5不会现这个吧。
simbasun
2006-09-20
看到你的view才明白,你原来是想做这个...:)
这种情况下,你不应该用redirect.
而应该直接用 new ModelAndView("viewName",Model);
为什么一定要用redirect呢?
这种情况下,你不应该用redirect.
而应该直接用 new ModelAndView("viewName",Model);
为什么一定要用redirect呢?
YuLimin
2006-09-20
也就是无论用有modelName或无modelName的方式传递给ModelAndView,这些值是有都转化为URL进行表示了,只不过在页面上面无法通过通常的方式取得,如我用的JSTL 1.0.6标签:
或
<c:out value='${modelName}'/>
<c:out value='${modelName.keyxxx}'/>
或
<c:out value='${keyxxx}'/>
simbasun
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="));
}
}
simbasun
2006-09-20
in your controller:
then DispatcherServlet render the view with your modelMap:
没有测试过, 看了下spring mvc的source code.
从上面的代码来看,
是可以的...
你应该Debug一下, 看看model在什么地方丢了...
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在什么地方丢了...
galaxystar
2006-09-20
内部重新定向!用过滤器或者AOP,把当前的request覆盖掉要转向的controller里的request,然后执行那个controller,渲染页面!
那个页面就可以用你上一个controller里处理好的数据项了!(contriller里处理的atribute不能重名,否则就覆盖掉了)
或者适当改造spring mvc框架!
那个页面就可以用你上一个controller里处理好的数据项了!(contriller里处理的atribute不能重名,否则就覆盖掉了)
或者适当改造spring mvc框架!
sorphi
2006-09-20
cookie?
- 浏览: 619071 次
- 性别:

- 来自: 福建莆田@广州

- 详细资料
搜索本博客
我的相册
身着OpenParty紧身服现身于滨江中路珠江旁
共 149 张
共 149 张
最近加入圈子
链接
- 超越黎明
- CJSDN
- CSDN
- JavaWorld@TW
- JavaEye
- Spring中文论坛
- Matrix
- BEA dev2dev
- Agile Tao Forum
- Flickr
- developerWorks
- TheServerSide
- Sun Java Forum
- JavaRanch
- 满江红开源
- del.icio.us
- Sun中国技术社区
- 希赛网中国软考
- AJAX Design Patterns
- CSS: The Missing Manual
- Java Persistence with Hibernate
- Script in Java
- Building Spring 2 Enterprise Applications
- Tuscany中文社区
- 我爱人开的购物店,欢迎光临
- Beginning Spring 2: From Novice to Professional
- Effective Java Second Edition
- JAVA世纪网
最新评论
-
2008年9月20日举行Open S ...
dev2dev中文社区已经关了,可以去 http://www.Java2Clas ...
-- by Java2Class -
2008年9月20日举行Open S ...
司令,借宝地问个事。现在dev2dev中文社区已经关了是吗?如果我想查原来的资源 ...
-- by wisdom3099 -
2008年9月20日举行Open S ...
哦,呵呵,发现了,现已修正,多谢!
-- by YuLimin -
2008年9月20日举行Open S ...
报名那个连接是没问题,是osc那个link会变成这样:http://yulimi ...
-- by chenk85 -
2008年9月20日举行Open S ...
欢迎参与,我会到场当志愿意者为大家服务的,嘿嘿,因为我是组织者之一嘛,你说的OS ...
-- by YuLimin






评论排行榜