package com.wh.handler;
/*** @ModelAttribute绑定请求参数到命令对象* @ModelAttribute一个具有如下三个作用:* * ①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,* 从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;* * ②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,* 如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,* 自动添加到模型对象中,用于视图页面展示时使用;* * ③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,* 是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。*/
import java.util.Arrays;
import java.util.List;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class TestModelAttribute {//一、绑定请求参数到命令对象/*** @ModelAttribute("u") User user* 相当与Model model;      model.addAttribute("u",user);* 即:将user这个对象添加到Model里去,在前台是通过${u.uname}等方式来获取这个值* 类似与:将一个页面的值,又传到另一个页面中去* * @ModelAttribute User user* 表示前台应通过${user.uname}等方式来获取*/@RequestMapping("/m1.action")public String m1(@ModelAttribute User user){System.out.println("u:"+user); return "sus.jsp";}/*** 对象图导航式的绑定    workInfo.city=bj* * 绑定请求参数到命令对象支持对象图导航式的绑定,如请求参数包含* “?username=zhang&password=123&workInfo.city=bj”* 自动绑定到user中的workInfo属性的city属性中。*/@RequestMapping(value="/m2.action")  public String test2(@ModelAttribute("user") User user) { System.out.println("u:"+user); return "sus.jsp";}//二、暴露表单引用对象为模型数据/***  @ModelAttribute("clist")*    public List cityList(){}*  表示将cityList方法的返回值添加到model里去,且Model的变量名为clist*  *  注意:*  1、代码会在执行功能处理方法之前执行,并将其自动添加到模型对象中,*  即必须执行其他的功能方法,此处的方法才会在功能方法之前执行,不然,此处的方法不会执行*  2、在功能处理方法中调用Model 入参的containsAttribute("cityList")将会返回true。*/@ModelAttribute("clist")public List cityList(){return (List) Arrays.asList("北京","上海","安徽");}@RequestMapping("/m3.action")public String demo(Model model){//System.out.println(model.containsAttribute("clist"));return "sus.jsp";}//-----------------------------/*** 如你要修改用户资料时一般需要根据用户的编号/用户名查找用户来进行编辑,此时可以通过如下代码查找要编辑的用户。* 也可以进行一些默认值的处理。* * 注意:因为@ModelAttribute注解方法会在功能方法之前执行,所以,可以在注解方法里进行一些查询操作。* 即功能方法都不用去数据库查询,可以让@ModelAttribute注解方法进行代劳,通过* @RequestParam(value="username", defaultValue="")先将要查询的相关信息获取;* 然后,功能方法只需要指定跳转到哪个页面即可*/@ModelAttribute("user")  //①  public User getUser(@RequestParam(value="username", defaultValue="") String username) {  //TODO 去数据库根据用户名查找用户对象  User user = new User();  user.setUname("zhang");  return user;  }  @RequestMapping(value="/m4") //②  public String test1(@ModelAttribute("user") User user, Model model){return "";} /**  *此处我们看到①和②有同名的命令对象,那Spring Web MVC内部如何处理的呢:*(1、首先执行@ModelAttribute注解的方法,准备视图展示时所需要的模型数据;*@ModelAttribute注解方法形式参数规则和@RequestMapping规则一样,如可以有@RequestParam等;*(2、执行@RequestMapping注解方法,进行模型绑定时首先查找模型数据中是否含有同名对象,如果有直接使用,*如果没有通过反射创建一个,因此②处的user将使用①处返回的命令对象。即②处的user等于①处的user。*///三、暴露@RequestMapping方法返回值为模型数据                 /**<h1>m5.jsp</h1>*<div>*    姓名:${user2.uname}<br/>*    年龄:${user2.uage}<br/>* 性别:${user2.usex}<br/>*</div>*/@RequestMapping("m5.jsp.action")public @ModelAttribute("user2") User test3(@ModelAttribute("user2") User user)  {return new User("张三",20,"男");}/***大家可以看到返回值类型是命令对象类型,而且通过@ModelAttribute("user2")注解,*此时会暴露返回值到模型数据(名字为user2)中供视图展示使用。那哪个视图应该展示呢?*此时Spring Web MVC会根据RequestToViewNameTranslator进行逻辑视图名的翻译,详见【4.15.5、RequestToViewNameTranslator】一节。*此时又有问题了,@RequestMapping注解方法的入参user暴露到模型数据中的名字也是user2,其实我们能猜到:*(3、@ModelAttribute注解的返回值会覆盖@RequestMapping注解方法中的@ModelAttribute注解的同名命令对象。*///四、匿名绑定命令参数/*public String test4(@ModelAttribute UserModel user, Model model)  或  public String test5(UserModel user, Model model)   此时我们没有为命令对象提供暴露到模型数据中的名字,此时的名字是什么呢?Spring Web MVC自动将简单类名(首字母小写)作为名字暴露,如“cn.javass.chapter6.model.UserModel”暴露的名字为“userModel”。public @ModelAttribute List<String> test6()  或  public @ModelAttribute List<UserModel> test7()   对于集合类型(Collection接口的实现者们,包括数组),生成的模型对象属性名为“简单类名(首字母小写)”+“List”,如List<String>生成的模型对象属性名为“stringList”,List<UserModel>生成的模型对象属性名为“userModelList”。其他情况一律都是使用简单类名(首字母小写)作为模型对象属性名,如Map<String, UserModel>类型的模型对象属性名为“map”。*/}

  

转载于:https://www.cnblogs.com/1020182600HENG/p/6911523.html

数据传递-------@ModelAttribute相关推荐

  1. Python Qt GUI设计:窗口之间数据传递(拓展篇—5)

    目录 1.单一窗口数据传输 2.多窗口数据传输:调用属性 3.多窗口数据传输:信号与槽 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的.如果这个程序有多个 ...

  2. javascript表单之间的数据传递

    今天有朋友问我关于用javascript来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家一些帮助,也帮助我总结以前学过,用过的知识. 一,最简单的就 ...

  3. iframe 数据传递

    1.使用iframe是父页面与子页面的数据传递 2.使用iframe 跳转部分研究处理ios兼容性 2.1 safai 会阻止iframe里的window.open()函数 采用了讲需要跳转的页面传向 ...

  4. html用vue传递数据,Vue组件及数据传递详解

    本文我们就和大家详细介绍一下Vue系列(三):组件及数据传递.路由.单文件组件.vue-cli脚手架,希望能帮助到大家. 一. 组件component 1. 什么是组件?组件(Component)是 ...

  5. 进程间数据传递:Queue,Pipe 进程间数据共享:Manager

    进程间数据传递:Queue,Pipe 进程间数据共享:Manager 1.使用multiprocessing模块的Queue实现数据传递 ''' 进程间通讯:Queue,用法跟线程里的Queue一样, ...

  6. android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递

    在上一次讲述Activity的时候,还有一个非常重要且常用的知识点没有讲,就是不同Activity之间的跳转和数据传递.我们在平常在使用app应用的时候,Activity的跳转和数据传递是经常会接触到 ...

  7. ajax bootstrap 进度条,Bootstrap进度条与AJAX后端数据传递结合使用实例详解

    很多时候,我们执行页面上某个URL请求的时候,需要有等待的时间.如果是直接的页面跳转,浏览器会有缓冲进度展示,但是如果是AJAX,我觉得应该自己加上进度条,等待数据全部接收到之后,进度条消失,展示页面 ...

  8. Android之一窥究竟Activity间的数据传递以及Intent的用处

    1.Activity与Intent * 1.1何为Intent * 1.2Intent的用武之地 * 1.3Activity间的数据传递 转载请标明出处: http://blog.csdn.net/h ...

  9. 父窗口与子窗口的数据传递问题

    曾经有那么一道题目是关于父窗口与子窗口的数据传递问题.我当时只知道父窗口向子窗口传递数据.不知道子窗口怎么向父窗口传递数据.今天终于把这个问题解决了,呵呵,记录一下: 我权且把原始窗口叫父窗口,把从该 ...

最新文章

  1. Android模拟多线程下载
  2. 使用Talend Open Studio将数据分步从oracle导入到hive中
  3. linux 空格函数,linux c语言的split函数和空格处理函数
  4. 谷歌微软高通反对英伟达收购ARM 值得国人深思
  5. python求图形面积_求高效的,计算两多边形重叠面积的算法,python实现
  6. 抢车位app下载_太方便了!有了这个APP,找车位再也不用“兜圈子”了
  7. HQL (五) 外置命名查询(sql语句单独保存起来)
  8. 10天学会phpWeChat——第一天:核心框架的目录结构
  9. 看看人家那后端API接口写得,那叫一个牛逼,再看看我的,像坨屎!
  10. python爬取文件内容_python爬取各类文档方法归类汇总
  11. nlp情感分析经典书籍推荐_通过监督学习对书籍进行情感分析
  12. Web(一)基础学习
  13. java 将网页表格导出_Java导出网页表格Excel过程详解
  14. 某广告SDK流量加解密-响应
  15. 【Multisim仿真】NE555电路三角波、方波、正弦波发生器
  16. 地统计插值学习心得(三)ArcGIS Pro与ArcMap软件中地统计分析的区别
  17. ET篇:master项目结构梳理
  18. 洛谷P1075 质因数分解C语言
  19. 最好的五款骨传导耳机推荐,双十一必入骨传导蓝牙耳机
  20. java怎么求方程的虚根_java解一元二次方程 运行出错?

热门文章

  1. 视频帧率对人眼主观感受的影响 2
  2. 语言密码加密变星号_为什么汉字不能设成密码,你想过吗?
  3. openfiledialog选择文件会占用文件_铁皮文件柜的尺寸规格如何选择?选购花都文件柜要注意的问题...
  4. php添加导航和删除导航,新增/修改/删除ECSHOP后台左侧导航菜单
  5. web.xml 总结
  6. Win7如何禁用无线网卡
  7. 【NOI OpenJudge】【1.1】编程基础之输入输出
  8. 【USACO1.2】【Luogu1206】回文平方数 Palindromic Squares(枚举,构造函数,进制)
  9. 易语言修改虚拟机硬盘id_易语言本地虚拟机源码
  10. php mysqli分页,PHP使用Mysqli类库实现完美分页效果的方法_PHP