在使用SpringMVC时遇到了这个跳转的问题很头疼。现在总结出来,对以后的开发有所帮助。

1、可以采用ModelAndView:

@RequestMapping("test1")
public ModelAndView test(){
ModelAndView view = new ModelAndView();
view.addAllObjects(map);
view.setViewName("redirect:http://localhost:8080/springMVC1/test2");
return view;
}

如果需要在Controller之间传递参数的时候,这种方式只能通过在访问路径后面加上参数以及将参数放到session域中的方式传递参数。

这种方式也可用于实现Controller到页面之间的跳转。并且可以传参数

public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
System.out.println("hello springMVC");
Map<String,String> map = new HashMap<String,String>();
map.put("msg", "你好Springmvc");
return new ModelAndView("/welcome","map",map);
}

ModelAndView构造方法中第一个参数是页面的访问路径(前面加上一个“/”表示从根路径开始。)后面两个参数就相当于键值对。在页面中通过el表达式取出键为map的值(map)${map}

ModelAndView跳转页面和跳转Controller的差距在于地址上跳转Controller有一个redirect:表示。跳转页面则没有

2、通过request.getRequestDispatch的方式跳转

public ModelAndView test(HttpServletRequest request,HttpServletResponse response){
try {
request.getRequestDispatcher("/test2").forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }

这种方式跳转到另一个页面时可以通过request.setAttribute(key,value)的方式将参数传到另一个Controller中。并且如果执行这个跳转以后,程序后面的代码就不会再执行了。
如果是想从Controller跳转到页面则只需要将地址改为页面的地址就可以了。

注意:

因为在项目里我需要从一个页面的Ajax请求到一个Controller进行处理该Ajax的请求,然后根据处理的结果跳转到不同的页面。我之前的做法是在处理Ajax请求的Controller里进行下一个页面的跳转。试了从处理该Ajax请求的Controller里直接跳转到下个页面,或是跳到下一个Controller在跳转到需要的页面中。使用了ModelAndView的方法和Request.getRequestDispatch 的方法都没有用,最终的目的都不会跳转到目的页面,出现两种问题:

1、使用Request的方法时,跳转一直跳到本页面

2、使用ModelAndView时,响应到了目的页面的内容,但是界面没有跳转

最后得出结论。使用这两中方方式都不会跳转,具体原因不知道。我想可能是使用Ajax请求一定会有一个放回的数据,所以SpringMVC不知道怎么处理放回数据和跳转页面的关系?

得出的一个解决办法是:

function test(){
$.ajax({
url:'testSkip/test3.do',
type:'post',
dataType:'json',
success:function(data){
console.info(data);
var url = data.url ;
alert(url);
window.location.href=url ;
},
error:function(){
alert("error");
}
});
}
@RequestMapping("test3")
@ResponseBody
public Object test3(){
Result result = new Result();
result.setUrl("testSkip2/test3.do");
return result ;
}
}
@Controller
@RequestMapping("testSkip2")
public class TestController2 {
@RequestMapping("test3")
public ModelAndView test2(){
System.out.println("跳转页面2.2");
return new ModelAndView("/company/company_on_line","result","数据"); }
}

在Ajax请求在两个Controller或是Controller与页面之间跳转之前插入一步回到原来的Ajax请求页面通过  window.location.href=url ; 再次发送请求。这是该请求的地址可以使一个Controller地址和页面地址。这是跳转就没问题。

springMVC中跳转问题的更多相关文章

  1. SpringMVC中跳转路径的问题

    1. @RequestMapping 1)@RequestMapping既可以作用于类,也可以作用于方法 2)@RequestMapping中value值(即跳转的路径),可以加 "/&qu ...

  2. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  3. Ajax发送POST请求SpringMVC页面跳转失败

    问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转.思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可 ...

  4. 9.springMVC中的拦截器

    springMVC中的拦截器大概大致可以分为以下几个步骤去学习: 1.自定义一个类实现HandlerInterceptor接口,这里要了解其中几个方法的作用 2.在springMVC的配置文件中添加拦 ...

  5. 第五节 关于SpringMVC中Ajax的配置和应用[下午]

    成熟,不是学会表达,而是学会咽下,当你一点一点学会克制住很多东西,才能驾驭好人生. 还有一周,祥云19就算结算了,一个半月的相处希望,胖先生算一个合格的老师 小白,小蔡,2婷婷,小猴,小恒,小崔,小龙 ...

  6. SpringMVC中注解和非注解方式下的映射器和适配器总结

    1. 非注解方式 1.1 处理器适配器 上一节中使用的处理器适配器是:org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapte ...

  7. 关于springMVC中component-scan的问题以及springmvc.xml整理

    关于springMVC中component-scan的问题以及springmvc.xml整理 一.component-scan问题和解决办法         最近在学习使用springMVC+myba ...

  8. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

    1.SpringMVC中通过@ResponseBody.@RequestParam默认值,@PathVariable的用法 package com.kuman.cartoon.controller.f ...

  9. SpringMVC中参数绑定

    SpringMVC中请求参数的接收主要有两种方式, 一种是基于HttpServletRequest对象获取, 另外一种是通过Controller中的形参获取 一  通过HttpServletReque ...

随机推荐

  1. caffe环境配置

    参考:http://blog.csdn.net/enjoyyl/article/details/47397505 http://blog.csdn.net/baobei0112/article/det ...

  2. 网页字体助手 WebFont Helper

    网页字体助手 是 Windows 平台离线的网页字体生成辅助工具.核心功能,采用 python 编写. WebFont Helper 功能特色 生成字体子集(即提取用到的字符生成字体,或者大家所说的字 ...

  3. BZOJ 2793: [Poi2012]Vouchers(调和级数)

    Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 582  Solved: 250[Submit][Status][Discuss] Description ...

  4. windows下安装mycat,并简单使用

    使用mycat需要先安装jdk1.7以上 参考:http://www.cnblogs.com/llhhll/p/9257764.html 1从官网下载解压后目录如下(1.6版本) 下载地址:https ...

  5. 如何在SQLServer中处理每天四亿三千万记录的

    项目背景 这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了.具体这个项目的情况,我有空 ...

  6. Windows 安装PostgreSQL

    下载二进制包:https://www.enterprisedb.com/download-postgresql-binaries 直接解压到C盘 Microsoft Windows [版本 6.3.9 ...

  7. hiho169周 - 表达式求值

    题目链接 计算表达式100*(2+12)-(20/3)*2 ---------------------------------------------------------------------- ...

  8. STM8S103内存详析

    STM8S103的RAM有1k,0x00-0x3FF(RAM和ROM统一编址),其中0x200-0x3ff共512个字节默认为堆栈,剩余的低端512个字节又分为了Zero Page和剩余的RAM(简称 ...

  9. requests 后续1

    发送带数据post请求 import requests # 发送post请求 data = { } response = requests.post(url, data=data) # 内网 需要 认 ...

  10. Servicification

    Servicification Summary The Chromium codebase now supports many platforms and use cases. In response ...