在使用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. nodeJS npm grunt grunt-cli

    1.安装好nodeJS后 ,一般都会把npm也安装好的.nodeJs集成npm的,可通过在cmd 分别运行 node -v和 npm -v来查看他们的版本,假设显示可说明可继续以下的操作 2.想安装g ...

  2. 极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间

    极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间 笔记体会: 方案一,事务相 ...

  3. jquery/zepto在插件编写上的几点区别

    1. 自定义事件的命名空间 jq的时间命名空间是用点“.”,而zepto是用冒号“:” 如 //jquery $(this).trigger('cusevent.pluginname'); //zep ...

  4. Parquet学习总结

    深入分析Parquet列式存储格式 Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的 ...

  5. redis在项目中的使用(单机版、集群版)

    1.下载jar包:jedis-2.6.2.jar 2.代码: JedisDao.java: package com.test.www.dao; public interface JedisDao { ...

  6. (转载)Mac系统下利用ADB命令连接android手机并进行文件操作

    Mac系统下利用ADB命令连接android手机并进行文件操作 标签: Mac adb android 2016-03-14 10:09 5470人阅读 评论(1) 收藏 举报  分类: Androi ...

  7. POJ 2481 Cows【树状数组】

    题意:给出n头牛的s,e 如果有两头牛,现在si <= sj && ei >= ej 那么称牛i比牛j强壮 然后问每头牛都有几头牛比它强壮 先按照s从小到大排序,然后用e来 ...

  8. passwd文件

    1.查看/etc/passwd [admin@localhost /]$ cat -n /etc/passwd 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1: ...

  9. 优动漫PAINT-草地教程

    非常实用的草地教程,是场景控们绝对要学会的绘画技巧~更有配套草地笔刷~让场景绘画更简易~ 教程是简单,呃.... 没有优动漫PAINT软件肿么办? 别着急,╭(╯^╰)╮ 小编给你送来了 齐全的哟? ...

  10. nginx 子进程 woker process 启动失败的问题

    问题: 重启nginx服务,worker process 子进程启动失败,启动的都是master进程: 负载急速升高(平常都是4-5),占用CPU资源多的前十进程都是nginx : nginx 错误日 ...