- 浏览: 7936084 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
@ModelAttribute一个具有如下三个作用:
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;
③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。
1 暴露表单引用对象为模型数据
在 controller 中所有的方法执行前执行
比如是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法
@ModelAttribute("cityList")
public List<String> cityList() {
return Arrays.asList("北京", "山东");
}
比如:
则访问
http://localhost:8080/spring-jsp/address/list1
时,会自动先执行
public List<Address> getAllAddresses() 方法,并且放到
addresses中,交给JSP页面取出
而在http://localhost:8080/spring-jsp/address/list2 中
则只是用
model.addAttribute实现
2) 模式2:method parameter级(即方法里所带的参数)
如果你的方法参数里带有@ModelAttribute的参数.表示从JSP Page传回的参数并自动的转化为java对象
对于前端的页面JSP
编辑个人信息的页面:
所以说,在参数中,加了@modelattributes后,
public String saveEdit(@ModelAttribute("personAttribute") Person person,
@PathVariable Integer id, Model model) {
中 表示从JSP 页面返回的一个叫"personAttribute"的值.并自动的转化为Person对象.
3 其他
匿名绑定命令参数
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”。
这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。
这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;
③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。
1 暴露表单引用对象为模型数据
在 controller 中所有的方法执行前执行
比如是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法
@ModelAttribute("cityList")
public List<String> cityList() {
return Arrays.asList("北京", "山东");
}
比如:
/** * 获得所有Addresses,并使他们成为一个model. * 注意@ModelAttribute作用于method级别上时.会在@Controller执行时加载 * method里的方法.即在@Controller执行时@ModelAttribute添加参数. * 返回于该@Controller返回的所有JSP页面. */ @ModelAttribute("addresses") public List<Address> getAllAddresses() { return addressService.getAll(); } /** * 处理和检索一个包含addresses 的JSP Page . */ @RequestMapping(value = "list1", method = RequestMethod.GET) public String getAllUsingModelAttribute() { logger.debug("Received request to show all addresses page"); // 他会解析 /WEB-INF/jsp/addressespage.jsp return "addressespage"; } /** * 处理和检索一个包含addresses 的JSP Page . * * @return the name of the JSP page */ @RequestMapping(value = "list2", method = RequestMethod.GET) public String getAllUsingModel(Model model) { logger.debug("Received request to show all addresses page"); // 检索所有的address并装入model返回addressespage.jsp model.addAttribute("addresses", addressService.getAll()); model.addAttribute("greetings", "I came from Model not ModelAttribute"); // This will resolve to /WEB-INF/jsp/addressespage.jsp return "addressespage"; }
则访问
http://localhost:8080/spring-jsp/address/list1
时,会自动先执行
public List<Address> getAllAddresses() 方法,并且放到
addresses中,交给JSP页面取出
而在http://localhost:8080/spring-jsp/address/list2 中
则只是用
model.addAttribute实现
2) 模式2:method parameter级(即方法里所带的参数)
如果你的方法参数里带有@ModelAttribute的参数.表示从JSP Page传回的参数并自动的转化为java对象
/** * 检索修改页面 */ @RequestMapping(value = "/edit/{id}", method = RequestMethod.GET) public String getEdit(@PathVariable Integer id, Model model) { /* * @PathVariable表示指定@RequestMapping的URL模板中{}里的值 * 相当于以前我们URL后面传的参数如XX?id=XXXX . * 但是现在我们可以用 XX/id/XX来代替. * 这个就是REST风格的URL,我们可以实现非常复杂的URL模板 */ logger.debug("Received request to show edit page"); /* * 根据ID检索出对应的Person,然后把检索出来的Person放入一个叫 * "personAttribute"的model中. * 这样editpage.jsp就会接收一个 名为personAttribute的参数. * 相当于request.setAttribute("XX",XX) */ model.addAttribute("personAttribute", personService.get(id)); // This will resolve to /WEB-INF/jsp/editpage.jsp return "editpage"; } /** * 保存修改结果 */ @RequestMapping(value = "/edit/{id}", method = RequestMethod.POST) public String saveEdit(@ModelAttribute("personAttribute") Person person, @PathVariable Integer id, Model model) { logger.debug("Received request to update person"); // 我们从页面接收到了一个名为"personAttribute"的model并命名为person // 同样我们也获得了指定的id. person.setId(id); // 更新person personService.edit(person); // 在更新后我们重新显示所有Person 的页面 model.addAttribute("persons", personService.getAll()); // This will resolve to /WEB-INF/jsp/personspage.jsp return "personspage"; }
对于前端的页面JSP
编辑个人信息的页面:
<form:form modelAttribute="personAttribute" method="POST" action="${saveUrl}"> <table> <tr> <td><form:label path="id">Id:</form:label></td> <td><form:input path="id" disabled="true"/></td> </tr>
所以说,在参数中,加了@modelattributes后,
public String saveEdit(@ModelAttribute("personAttribute") Person person,
@PathVariable Integer id, Model model) {
中 表示从JSP 页面返回的一个叫"personAttribute"的值.并自动的转化为Person对象.
3 其他
匿名绑定命令参数
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”。
@ModelAttribute public Account addAccount(@RequestParam String number) { return accountManager.findAccount(number); }
这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。
这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1566方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2017前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3463info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2231import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 489https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 683public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 606https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 668https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 432https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5381 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3095微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 612https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1842什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 962本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1359原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 856public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 668在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 936-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 767一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1903介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
在 Spring MVC 中,Model 是核心组件之一,负责处理业务逻辑和数据管理。下面我们将深入探讨 Spring MVC 中的 Model 概念。 1. **Model 对象**:在 Spring MVC 中,Model 对象是用于存储和传递应用程序数据的 Java ...
Spring MVC允许我们使用`Model`接口的`addAttributes()`方法添加多个模型对象,这些对象可以在同一个视图中访问。 8. **模型和视图分离(Separation of Concerns)** Spring MVC的模型-视图-控制器架构确保了模型...
### Spring MVC 教程知识点详解 #### Spring Web MVC 框架简介 Spring Web MVC 是 Spring Framework 的一个重要组成部分,主要用于构建基于 Java 的 Web 应用程序。它提供了一个灵活且强大的 MVC 实现,使得开发者...
以上就是关于“spring学习:spring mvc在redirect请求中传递数据”的详细解析,涵盖了重定向的基本原理、Spring MVC的`RedirectAttributes`接口、Flash Attributes的使用,以及在实际开发中的应用和注意事项。...
在实际开发中,我们通常会用到 Spring MVC 提供的一些工具类,如 Model、RedirectAttributes 和 FlashAttributes,它们帮助我们在处理请求之间传递数据。Model 用于在 Controller 和 View 之间共享数据,...
本教程将深入探讨Spring MVC中常用的请求参数接收方式。通过实践案例`ParamPassDemo.java`,我们将了解到几种常见的方法,以便在控制器中获取用户提交的数据。 1. **路径变量(Path Variables)** 当URL路径中包含...
在Spring MVC框架中,处理器(Handler)方法是处理用户请求的核心组件。这些方法通常定义在@Controller注解的类中,并通过@RequestMapping或其相关的注解来指定处理特定HTTP请求的路径。处理器方法的返回值非常关键...
SpringMVC作为Spring框架中的一个重要组件,为构建Web应用提供了一种模型-视图-控制器(Model-View-Controller,简称MVC)的实现方式。本SpringMVC学习文档主要分为以下几部分: 1. Spring Web MVC框架简介:文档首先...
**Spring Web MVC** 是 Spring 框架中的一个重要模块,它实现了 MVC(Model-View-Controller)设计模式,并且提供了丰富的功能来帮助开发者构建强大的 Web 应用程序。 #### 新特性 - **允许其他MVC实现**: Spring ...
在深入学习 Spring MVC 时,还需要了解其他关键概念,如拦截器(Interceptor)、模型属性(Model Attributes)、数据绑定、异常处理、国际化支持等。同时,熟悉 RESTful API 设计原则和 JSON 数据交换格式,可以使 ...
在Spring MVC中,`@SessionAttributes`是一个非常实用的注解,它允许我们将ModelMap中的特定属性持久化到HTTP Session中,以便在多个请求之间共享数据。这在处理需要跨请求保持状态的情况时非常有用,比如用户登录...
1. **模型(Model)**:在Spring MVC中,模型对象是业务逻辑层的数据载体,通常由服务层方法返回,包含了应用程序状态。这些对象可以是简单的JavaBean或POJO(Plain Old Java Object),封装了业务数据。 2. **模型...
12. `@RequestParam/@PathVariable/@ModelAttribute`的集合注解如`@RequestParams`, `@PathVariables`, `@ModelAttributes`,允许一次性处理多个参数。 13. `@RequestBody`:用于读取HTTP请求体中的JSON或XML数据,...
在Spring MVC中,可以通过`Model`或`ModelMap`对象将数据添加到模型中,这些数据随后可以在视图中使用。 5. **视图(View)** 视图负责呈现模型数据。Spring MVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等。...
Spring MVC是Spring框架的一部分,专门用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了构建Web层的便捷方式,并且与Spring的其他技术无缝整合。 文档内容涵盖了Spring Web MVC框架的简介,包括...
在Spring MVC中,我们可以使用`@PathVariable`注解来捕获URL模板中的动态部分。例如,一个RESTful API可能有一个获取用户信息的路径`/users/{userId}`,其中`userId`就是路径变量。通过以下代码接收该参数: ```...
7.1. Alternate Spring MVC configuration 7.1.1. Customizing DispatcherServlet configuration 7.1.2. Adding additional servlets and filters 7.1.3. Declaring DispatcherServlet in web.xml 7.2. Processing ...
5. **Web应用增强**: Spring 2.5对MVC框架进行了大量改进,包括支持RESTful风格的URL映射、模型视图助手(model attributes)、局部视图路径(local view resolution)等,提高了Web应用的开发效率和灵活性。 6. **数据...
在Spring MVC框架中,JSP(JavaServer Pages)与Java之间的数据传递是Web开发中的常见操作。本项目可能是一个Eclipse导出的Spring MVC应用,使用的`spring-webmvc-4.2.5.RELEASE`是Spring MVC的核心库,用于处理HTTP...