SpringMVC中Controller的方法返回值
1. 返回ModelAndView对象
controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。
实例
@RequestMapping("/itemList.action")
public ModelAndView itemList () {
//获取数据
List<Items> itemList = new ArrayList<Items>();
itemList .add(new Items(1, "T460", 9000f, "联想高端机", "图片1", new Date()));
itemList .add(new Items(2, "T450", 7000f, "联想高端机", "图片2", new Date()));
itemList .add(new Items(3, "T410", 5000f, "联想高端机", "图片3", new Date()));
//创建modelandview对象
ModelAndView modelAndView = new ModelAndView();
//将数据存放到model中, 即保存在request域中
modelAndView.addObject("itemList", itemList);
//页面转发
modelAndView.setViewName("itemList");
//返回结果
return modelAndView;
}
2. 返回void
在controller方法形参上可以定义request和response,使用request或response指定响应结果:
1)、使用request转向页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);
2)、也可以通过response页面重定向:
response.sendRedirect("url")
3)、也可以通过response指定响应结果,例如响应json数据如下:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");
实例
@RequestMapping("/itemEdit.action")
public void itemEdit (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求id信息
String idStr = request.getParameter("id");
int id = Integer.parseInt(idStr);
//跟局id调用业务层查询对应数据
Items items = itemService.findById(id);
request.setAttribute("item", items);
//请求转发, 此时配置的试图解析器的prefix不起作用了
request.getRequestDispatcher("/WEB-INF/jsp/editItem.jsp").forward(request, response);
}
3. 返回字符串
1) 逻辑视图名
controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/item/editItem.jsp
return "item/editItem";
实例
@RequestMapping("/itemList.action")
public String itemList (Model model) throws CustomerException {
//调用业务层查询订单数据
List<Items> itemList = itemService.findAll();
//将查询结果保存在model中
model.addAttribute("itemList", itemList);
//页面转发
return "itemList";
}
2) Redirect重定向
Contrller方法返回结果重定向到一个url地址,如下商品修改提交后重定向到商品查询方法,参数无法带到商品查询方法中。
//重定向到queryItem.action地址,request无法带过去
return "redirect:queryItem.action";
redirect方式相当于“response.sendRedirect()”,转发后浏览器的地址栏变为转发后的地址,因为转发即执行了一个新的request和response。
由于新发起一个request原来的参数在转发时就不能传递到下一个url,如果要传参数可以/item/queryItem.action后边加参数,如下:
/item/queryItem?...&…..
实例
@RequestMapping("loginSubmit.action")
public String loginSubmit (HttpSession session, String username, String password) {
//将用户名保存在session中
session.setAttribute("username", username);
return "redirect:/item/itemList.action";
}
3) forward转发
controller方法执行后继续执行另一个controller方法,如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。
//结果转发到editItem.action,request可以带过去
return "forward:editItem.action";
forward方式相当于“request.getRequestDispatcher().forward(request,response)”,转发后浏览器地址栏还是原来的地址。转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。
实例
@RequestMapping(value="/updateitem.action",method={RequestMethod.POST, RequestMethod.GET})
public String updateItem (Items item, MultipartFile picture) throws IllegalStateException, IOException {
//图片保存
//为每个图片生成一个独一无二的名称
String picName = UUID.randomUUID().toString();
//获取图片的后缀名
String originalFilename = picture.getOriginalFilename();
String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
//拼接图片名称
String pictureName = picName.concat(extName);
//将图片保存在制定路径下
picture.transferTo(new File("E:\\temp\\" + pictureName));
//将图片名称保存到数据库中
item.setPic(pictureName);
//调用业务层修改数据
itemService.update(item);
return "forward:/item/itemEdit.action";
}
SpringMVC中Controller的方法返回值的更多相关文章
- springMVC对于controller处理方法返回值的可选类型
http://www.360doc.com/content/14/0309/19/834950_359081989.shtml
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...
- 详解SpringMVC中Controller的方法中参数的工作原理——基于maven
转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...
- 【MVC - 参数原理】详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/spring ...
- 详解SpringMVC中Controller的方法中参数的工作原理
Spring MVC中Controller的处理方法的参数可以是Integer,String,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非 ...
- springmvc中controller内方法跳转forward?redirect?
使用springmvc的controller的时候,碰到controller内方法的跳转的问题,记录下问题以及自己测试的过程. 场景: 业务执行更新操作之后返回列表页面,列表页面需默认展示查询的列表数 ...
- Spring MVC controller的方法返回值
ModeAndView 可以在构造时确定需要跳转的页面也可以通过setViewName方法来确定需要跳转的页面 String 指定返回页面的视图名称,页面跳转,如果加了@ResponseBody注解, ...
- springMVC中controller层方法中使用private和public问题
楼主一直习惯使用public,偶尔手误也可能使用private,但是发觉也没啥区别,都能调用service层,注入bean. 后来做一个新项目时,发觉自己以前的写的部分功能报错,当时有点懵逼,,找了半 ...
- SpringMVC中Controller
详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] 目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodR ...
随机推荐
- SMO实现
#include "stdio.h" #include <vector> using namespace std; float function(float alfa[ ...
- 如何用代码禁用SpriteBuilder中创建的关节
这个目标是临时的禁用距离关节(distance joint). 不幸的是,你只可以无效化(通过删除的方式)一个关节. 所以,你必须通过代码创建一个新的距离关节实例并且赋予它之前删除关节(在Sprite ...
- SpannableString 给TextView添加不同的显示样式
TextView是用来显示文本的,有时需要给TextView中的个别字设置为超链接,或者设置个别字的颜色.字体等,那就需要用到Spannable对象,可以借助Spannable对象实现以上设置 myT ...
- PS图层混合算法之六(差值,溶解, 排除)
差值模式: 查看每个通道中的颜色信息,比较底色和绘图色,用较亮的像素点的像素值减去较暗的像素点的像素值.与白色混合将使底色反相:与黑色混合则不产生变化. 排除模式可生成和差值模式相似的效果,但比差值模 ...
- TCP的核心系列 — ACK的处理(一)
TCP发送数据包后,会收到对端的ACK.通过处理ACK,TCP可以进行拥塞控制和流控制,所以 ACK的处理是TCP的一个重要内容.tcp_ack()用于处理接收到的ACK. 本文主要内容:TCP接收A ...
- SpriteBuilder中的CCSprite9Slice是个什么鬼?
CCSprite大家都知道,但是加上后面那一串又变成了神马呢? 我们可以首先到官方的API文档网站查一下,如下: http://www.cocos2d-swift.org/docs/api/Class ...
- 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型
一 . 常量和变量 Swift语言 对常量和变量的声明进行了明确的区分 Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...
- 多Region下HBase写入问题
最近在集群上发现hbase写入性能受到较大下降,测试环境下没有该问题产生.而生产环境和测试环境的区别之一是生产环境的region数量远远多于测试环境,单台regionserver服务了约3500个re ...
- iPhone实现自定义多选列表
好久没更新博客了,今天写了一个自定义的多选列表,可以跟爱学习的各位进行分享,首先我们先来看一下效果图: 一般大家都是用UITableView自己的编辑模式来实现CheckBox的,这里我们用自定义Ce ...
- ruby轻松自删除代码
因为windows的文件删除机制和unix like的不一样,so不保证如下代码能在windows中使用,哪位童鞋帮我在windows中测试一下也好啊! #!/usr/bin/ruby 5.times ...