`
Action-人生
  • 浏览: 104799 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring学习之@ModelAttribute运用详解

阅读更多
http://blog.csdn.net/li_xiao_ming/article/details/8349115
@ModelAttribute使用详解
1.@ModelAttribute注释方法
    例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。
   
    (1)@ModelAttribute注释void返回值的方法
   
[java] view plaincopyprint?
<span style="font-size:12px;">@Controller 
    public class HelloWorldController { 
 
        @ModelAttribute 
        public void populateModel(@RequestParam String abc, Model model) { 
           model.addAttribute("attributeName", abc); 
        } 
 
        @RequestMapping(value = "/helloWorld") 
        public String helloWorld() { 
           return "helloWorld"; 
        } 
    }</span> 
<span style="font-size:12px;"> 
</span> 

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

[java] view plaincopyprint?
<span style="font-size:12px;">       @RequestMapping(value = "/helloWorld") 
        public String helloWorld(String abc) { 
           return "helloWorld"; 
        }</span> 
<span style="font-size:12px;"> 
</span> 
       
    (2)@ModelAttribute注释返回具体类的方法
   
[java] view plaincopyprint?
<span style="font-size:12px;">@ModelAttribute 
    public Account addAccount(@RequestParam String number) { 
       return accountManager.findAccount(number); 
    } 
</span> 
<span style="font-size:12px;"> 
</span> 

    这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。
    这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。
   
    (3)@ModelAttribute(value="")注释返回具体类的方法
   
[java] view plaincopyprint?
<span style="font-size:12px;">@Controller 
    public class HelloWorldController { 
 
        @ModelAttribute("attributeName") 
        public String addAccount(@RequestParam String abc) { 
           return abc; 
        } 
 
        @RequestMapping(value = "/helloWorld") 
        public String helloWorld() { 
           return "helloWorld"; 
        } 
    }</span> 
<span style="font-size:12px;"> 
</span> 


    这个例子中使用@ModelAttribute注释的value属性,来指定model属性的名称。model属性对象就是方法的返回值。它无须要特定的参数。
   
    (4)@ModelAttribute和@RequestMapping同时注释一个方法
   
[java] view plaincopyprint?
<span style="font-size:12px;">@Controller 
    public class HelloWorldController { 
 
        @RequestMapping(value = "/helloWorld.do") 
        @ModelAttribute("attributeName") 
        public String helloWorld() { 
           return "hi"; 
        } 
    }</span> 
<span style="font-size:12px;"> 
</span> 


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

    (1)从model中获取    
   
[java] view plaincopyprint?
<span style="font-size:12px;">@Controller 
    public class HelloWorldController { 
 
        @ModelAttribute("user") 
        public User addAccount() { 
           return new User("jz","123"); 
        } 
 
        @RequestMapping(value = "/helloWorld") 
        public String helloWorld(@ModelAttribute("user") User user) { 
           user.setUserName("jizhou"); 
           return "helloWorld"; 
        } 
    }</span> 
<span style="font-size:12px;"> 
</span> 


    在这个例子里,@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性。
    此时如果方法体没有标注@SessionAttributes("user"),那么scope为request,如果标注了,那么scope为session
   
    (2)从Form表单或URL参数中获取(实际上,不做此注释也能拿到user对象)
   
   
[java] view plaincopyprint?
<span style="font-size:12px;">@Controller 
    public class HelloWorldController { 
 
        @RequestMapping(value = "/helloWorld") 
        public String helloWorld(@ModelAttribute User user) { 
           return "helloWorld"; 
        } 
    }</span> 
<span style="font-size:12px;"> 
</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