`
a137268431
  • 浏览: 154510 次
文章分类
社区版块
存档分类
最新评论

spring学习之@ModelAttribute运用详解

 
阅读更多
@ModelAttribute使用详解

1.@ModelAttribute注释方法
例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。

(1)@ModelAttribute注释void返回值的方法

  1. <spanstyle="font-size:12px;">@Controller
  2. publicclassHelloWorldController{
  3. @ModelAttribute
  4. publicvoidpopulateModel(@RequestParamStringabc,Modelmodel){
  5. model.addAttribute("attributeName",abc);
  6. }
  7. @RequestMapping(value="/helloWorld")
  8. publicStringhelloWorld(){
  9. return"helloWorld";
  10. }
  11. }</span>
  12. <spanstyle="font-size:12px;">
  13. </span>


这个例子,在获得请求/helloWorld 后,populateModel方法在helloWorld方法之前先被调用,它把请求参数(/helloWorld?abc=text)加入到一个名为attributeName的model属性中,在它执行后helloWorld被调用,返回视图名helloWorld和model已由@ModelAttribute方法生产好了。
这个例子中model属性名称和model属性对象有model.addAttribute()实现,不过前提是要在方法中加入一个Model类型的参数。
当URL或者post中不包含次参数时,会报错,其实不需要这个方法,完全可以把请求的方法写成,这样缺少此参数也不会出错

  1. <spanstyle="font-size:12px;">@RequestMapping(value="/helloWorld")
  2. publicStringhelloWorld(Stringabc){
  3. return"helloWorld";
  4. }</span>
  5. <spanstyle="font-size:12px;">
  6. </span>


(2)@ModelAttribute注释返回具体类的方法

  1. <spanstyle="font-size:12px;">@ModelAttribute
  2. publicAccountaddAccount(@RequestParamStringnumber){
  3. returnaccountManager.findAccount(number);
  4. }
  5. </span>
  6. <spanstyle="font-size:12px;">
  7. </span>

这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。
这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。

(3)@ModelAttribute(value="")注释返回具体类的方法

  1. <spanstyle="font-size:12px;">@Controller
  2. publicclassHelloWorldController{
  3. @ModelAttribute("attributeName")
  4. publicStringaddAccount(@RequestParamStringabc){
  5. returnabc;
  6. }
  7. @RequestMapping(value="/helloWorld")
  8. publicStringhelloWorld(){
  9. return"helloWorld";
  10. }
  11. }</span>
  12. <spanstyle="font-size:12px;">
  13. </span>


这个例子中使用@ModelAttribute注释的value属性,来指定model属性的名称。model属性对象就是方法的返回值。它无须要特定的参数。

(4)@ModelAttribute和@RequestMapping同时注释一个方法

  1. <spanstyle="font-size:12px;">@Controller
  2. publicclassHelloWorldController{
  3. @RequestMapping(value="/helloWorld.do")
  4. @ModelAttribute("attributeName")
  5. publicStringhelloWorld(){
  6. return"hi";
  7. }
  8. }</span>
  9. <spanstyle="font-size:12px;">
  10. </span>


这时这个方法的返回值并不是表示一个视图名称,而是model属性的值,视图名称由RequestToViewNameTranslator根据请求"/helloWorld.do"转换为逻辑视图helloWorld。
Model属性名称有@ModelAttribute(value=””)指定,相当于在request中封装了key=attributeName,value=hi。

2.@ModelAttribute注释一个方法的参数

(1)从model中获取

  1. <spanstyle="font-size:12px;">@Controller
  2. publicclassHelloWorldController{
  3. @ModelAttribute("user")
  4. publicUseraddAccount(){
  5. returnnewUser("jz","123");
  6. }
  7. @RequestMapping(value="/helloWorld")
  8. publicStringhelloWorld(@ModelAttribute("user")Useruser){
  9. user.setUserName("jizhou");
  10. return"helloWorld";
  11. }
  12. }</span>
  13. <spanstyle="font-size:12px;">
  14. </span>


在这个例子里,@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性。
此时如果方法体没有标注@SessionAttributes("user"),那么scope为request,如果标注了,那么scope为session

(2)从Form表单或URL参数中获取(实际上,不做此注释也能拿到user对象)


  1. <spanstyle="font-size:12px;">@Controller
  2. publicclassHelloWorldController{
  3. @RequestMapping(value="/helloWorld")
  4. publicStringhelloWorld(@ModelAttributeUseruser){
  5. return"helloWorld";
  6. }
  7. }</span>
  8. <spanstyle="font-size:12px;">
  9. </span>


注意这时候这个User类一定要有没有参数的构造函数。

分享到:
评论

相关推荐

    spring学习教程之@ModelAttribute注解运用详解

    @ModelAttribute注解运用详解 @ModelAttribute注解是Spring框架中的一种重要注解,用于将模型数据绑定到控制器的方法参数中。下面我们将详细介绍@ModelAttribute注解的使用方法和示例代码。 一、@ModelAttribute...

    spring mvc中注解@ModelAttribute的妙用分享

    本文将深入探讨`@ModelAttribute`的两种主要用途,并结合示例展示如何巧妙地运用它来简化Controller层的代码。 1. **作为方法参数**: 当`@ModelAttribute`注解应用于方法参数时,Spring MVC会尝试从请求中找到...

    Spring MVC 学习笔记 十一 data binding

    **Spring MVC 数据绑定详解** 在Web开发中,Spring MVC框架为我们提供了一种高效的数据绑定机制,使得控制器(Controller)能够方便地将用户提交的表单数据与Java对象进行映射,简化了处理HTTP请求和响应的过程。本...

    SpringMVC 常用注解类视频详解

    在Spring MVC框架中,注解是实现控制器、数据绑定、模型映射等核心功能的关键元素。这些注解简化了代码,使得开发更加...视频教程结合课程文档将提供更加直观和详尽的指导,帮助学习者更好地掌握Spring MVC的注解使用。

    Spring注解详解

    在Java Spring框架中,注解(Annotation)是配置的核心元素之一,它们极大地简化了XML配置,使得代码更加简洁,更具可读性。本篇将详细解析Spring中的主要注解及其用法。 一、注解说明 1. 使用简化配置:Spring...

    跟我学spring3

    Spring框架作为Java领域最流行的轻量级开源框架之一,它的学习对于任何Java开发者来说都是至关重要的。本资源主要关注Spring3版本,虽然它相对较老,但其中的基础概念和核心机制在Spring的后续版本中仍然保持一致,...

    spring mvc详解

    本文将深入探讨Spring MVC的核心概念、工作原理以及如何在实际项目中运用。 ### 1. 核心概念 - **DispatcherServlet**:Spring MVC 的入口点,负责接收HTTP请求,并根据配置的映射规则转发到相应的处理器。 - **...

    Spring In Action SpringMVC 提交表单

    《Spring In Action: SpringMVC 提交表单详解》 在Web开发中,SpringMVC作为Spring框架的一部分,是处理HTTP请求和响应的强大工具。它为开发者提供了构建高性能、易于测试的Web应用程序的结构。本篇文章将深入探讨...

    Spring5 MVC示例

    **Spring5 MVC 示例详解** Spring MVC是Spring框架的一部分,它是一个强大的用于构建Web应用程序的模型-视图-控制器(MVC)架构。Spring5作为最新版本,引入了许多新特性和改进,使得开发者能够更加高效地构建可...

    spring中文教程

    ### Spring中文教程:深入理解与应用 #### 引言 Spring框架自2003年由Rod Johnson...掌握Spring框架的关键在于理解其设计理念,熟练运用其提供的工具,不断实践和优化代码结构,以构建稳定、高效、可维护的应用系统。

    SpringBoot前后端传值.docx

    ### Spring Boot 前后端传值知识点详解 #### 一、@RequestParam 注解 - **定义**:`@RequestParam` 注解主要用于处理 Content-Type 为 `application/x-www-form-urlencoded` 编码的内容,适用于 GET 或 POST 请求...

    springmvc的基本使用

    `springmvc入门详解.pdf`可能包含详细的步骤和实例,从创建项目、配置环境到编写第一个简单的Spring MVC应用,包括Hello World示例的Controller、配置文件设置、运行及调试等。 综上所述,Spring MVC 提供了一套...

    SpringMVC框架学习指南.pdf

    本文旨在深入探讨SpringMVC框架的核心概念、特性及其实际应用,帮助初学者快速掌握并熟练运用这一框架。 #### SpringMVC框架的特色与优势 1. **URL自定义**:SpringMVC支持灵活的URL映射,允许开发者自定义URL结构...

    spring 注解开发说明

    ### Spring注解开发详解 随着软件工程的发展与技术演进,传统的XML配置方式逐渐显得冗余且不便于维护。为了简化开发流程并提高程序的可读性和可维护性,Spring框架自2.5版本起引入了注解驱动的配置方式。这种基于...

    spring mvc应用之用户管理系统

    在本项目中,我们将深入探讨"Spring MVC应用之用户管理系统"。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而用户管理系统则是任何Web应用的基础组成部分。它涉及到用户注册、登录、权限管理等多个...

    Spring 2.5 mvc例子

    **Spring MVC 框架详解** Spring MVC 是 Spring 框架的一个重要组成部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)框架。在 Spring 2.5 版本中,这个框架已经相当成熟,为开发者提供了强大的功能和...

    spring和Struts2注解文档

    ### Spring注解详解 #### 1.1 Spring注解说明 Spring框架通过引入注解,极大地简化了Java开发中的配置工作,使得开发者能够更加专注于业务逻辑的编写。Spring注解主要应用于依赖注入、控制器定义、事务管理、缓存...

Global site tag (gtag.js) - Google Analytics