`
Asen丶
  • 浏览: 40553 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring mvc之@ModelAttribute注解

阅读更多

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

@Controller  
public class HelloModelController {  
    @ModelAttribute   
    public void populateModel(@RequestParam String abc, Model model) {    
       model.addAttribute("attributeName", abc);    
    }    
  
    @RequestMapping(value = "/helloWorld")    
    public String helloWorld() {    
       return "helloWorld.jsp";    
    }    
}  

在这个代码中,访问控制器方法helloWorld时,会首先调用populateModel方法,将页面参数abc(/helloWorld.ht?abc=text)放到model的attributeName属性中,在视图中可以直接访问。

jsp页面页面如下:

<%@ page language="java" contentType="text/html; charset=utf-8"  
    pageEncoding="utf-8"%>  
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
<html>  
<head>  
</head>  
<body>  
<c:out value="${attributeName}"></c:out>  
</body>  
</html> 

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

@Controller  
public class Hello2ModelController {  
      
    @ModelAttribute   
    public User populateModel() {    
       User user=new User();  
       user.setAccount("ray");  
       return user;  
    }    
    @RequestMapping(value = "/helloWorld2")    
    public String helloWorld() {    
       return "helloWorld.jsp";    
    }    
}  

 当用户请求 http://localhost:8080/test/helloWorld2.html时,首先访问populateModel方法,返回User对象,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回User类型,那么这个model属性的名称是user。 

这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。

jsp 中如下访问:

<c:out value="${user.account}"></c:out> 

也可以指定属性名称

@Controller  
public class Hello2ModelController {  
      
    @ModelAttribute(value="myUser")  
    public User populateModel() {    
       User user=new User();  
       user.setAccount("ray");  
       return user;  
    }    
    @RequestMapping(value = "/helloWorld2")    
    public String helloWorld(Model map) {    
       return "helloWorld.jsp";    
    }    
} 

jsp中如下访问:

<c:out value="${myUser.account}"></c:out>  

对象合并:

@Controller  
public class Hello2ModelController {  
      
    @ModelAttribute  
    public User populateModel() {    
       User user=new User();  
       user.setAccount("ray");  
       return user;  
    }    
      
    @RequestMapping(value = "/helloWorld2")    
    public String helloWorld(User user) {  
        user.setName("老王");  
       return "helloWorld.jsp";    
    }    
}  

对象合并指定对象名称:

@Controller  
public class Hello2ModelController {  
      
    @ModelAttribute("myUser")  
    public User populateModel() {    
       User user=new User();  
       user.setAccount("ray");  
       return user;  
    }    
      
    @RequestMapping(value = "/helloWorld2")    
    public String helloWorld(@ModelAttribute("myUser") User user) {  
        user.setName("老王");  
       return "helloWorld.jsp";    
    }    
}

这样在jsp中可以使用如下方式访问

<c:out value="${myUser.name}"></c:out>  
<c:out value="${myUser.account}"></c:out>  

3.通过此特性控制权限.

我们可以在基类方法中控制写此注解,需要控制权限的控制器,继承控制器就可以了

public class BaseController {  
      
    @ModelAttribute  
    public void populateModel() throws Exception {    
       SysUser user=ContextUtil.getCurrentUser();  
       if(user.getAccount().equals("admin")){  
           throw new Exception("没有权限");  
       }  
    }    
}  

需要控制权限的类继承BaseController

@Controller  
public class Hello2ModelController extends BaseController {  
      
    @RequestMapping(value = "/helloWorld2")    
    public String helloWorld(@ModelAttribute("myUser") User user) {  
        user.setName("老王");  
       return "helloWorld.jsp";    
    }    
}  

这样就可以控制权限了,当然控制权限的方法有很多,比如通过过滤器等。这里只是提供一种思路。

 

 

总结:

@ModelAttribute具有如下三个作用:

①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用。其实@ModelAttribute此处对于供视图页面展示来说与model.addAttribute("attributeName", abc);功能类似。

public String test(@ModelAttribute("user") UserModel user)   

此处多了一个注解@ModelAttribute("user"),它的作用是将该绑定的命令对象以“user”为名称添加到模型对象中供视图页面展示使用。我们此时可以在视图页面使用${user.username}来获取绑定的命令对象的属性。

 

②暴露@RequestMapping 方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)  

大家可以看到返回值类型是命令对象类型,而且通过@ModelAttribute("user2")注解,此时会暴露返回值到模型数据( 名字为user2 ) 中供视图展示使用

@ModelAttribute 注解的返回值会覆盖@RequestMapping 注解方法中的@ModelAttribute 注解的同名命令对象

 

③暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping 注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;

0
0
分享到:
评论

相关推荐

    Spring MVC 之@ModelAttribute使用.rar

    当`@ModelAttribute`注解在控制器方法的参数上时,Spring MVC会尝试从请求中获取对应的数据,并将其转换为该参数类型的对象。这个过程包括以下步骤: - **查找数据源**:Spring MVC会检查请求参数、模型属性...

    spring mvc中的@ModelAttribute注解示例介绍

    在Spring MVC框架中,`@ModelAttribute`注解扮演着至关重要的角色,主要用于数据绑定和模型对象的管理。本文将深入探讨`@ModelAttribute`的工作原理、使用场景以及如何通过示例来理解其功能。 首先,`@...

    java中@ModelAttribute注解的作用

    在Java的Spring MVC框架中,`@ModelAttribute`注解是一个非常关键的元素...理解并熟练运用`@ModelAttribute`注解是Spring MVC开发中的重要技能,它极大地简化了数据处理和对象绑定的过程,提高了代码的可读性和维护性。

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

    当`@ModelAttribute`注解应用于方法参数时,Spring MVC会尝试从请求中找到匹配的参数值,并将其注入到对应的对象中。例如,如果你有一个`User`类,它包含了`name`和`email`属性,你可以创建一个方法: ```java @...

    Spring3MVC 在JSP中使用@ModelAttribute

    在Spring MVC框架中,`@ModelAttribute`是一个非常关键的注解,它主要用于数据绑定和模型属性的处理。本文将深入探讨在JSP中如何使用`@ModelAttribute`,以及它在实际开发中的应用。 首先,`@ModelAttribute`通常用...

    [Spring MVC] - ModelAttribute使用.docx

    在Spring MVC框架中,`@ModelAttribute`是一个非常重要的注解,它主要用于数据绑定和模型对象的处理。在本文中,我们将深入探讨`@ModelAttribute`的使用及其在控制器(Controller)中的作用。 首先,`@...

    spring mvc RequestParam与 ModelAttribute异同.docx

    此外,Spring MVC会将带有 `@ModelAttribute` 注解的参数添加到Model中,以便在视图层可以访问。 3. **两者的主要差异** - `@RequestParam` 更注重单个参数的处理,而 `@ModelAttribute` 更适合于处理复杂对象,...

    SpringMVC @ModelAttribute应用

    在Spring MVC框架中,`@ModelAttribute`是一个非常重要的注解,它主要用于数据绑定,帮助开发者在控制器方法中接收和处理请求参数。这篇文章将深入探讨`@ModelAttribute`的应用及其背后的原理。 `@ModelAttribute`...

    SpringMVCDemo:Spring MVC 框架知识案例

    5.Spring MVC @ModelAttribute 注解案例 6.Spring MVC 国际化案例 7.Spring MVC 请求转发与请求重定向案例 8.Spring MVC 下载 Excel 文档的需求案例 9.Spring MVC RESTful 风格的请求方式案例 10.Spring + Spring ...

    ModelAttribute注解详细使用.docx

    ### ModelAttribute注解详解 在Spring MVC框架中,`@ModelAttribute`注解是一个非常重要的工具,它主要用于将请求参数绑定到Model对象上。这不仅提高了数据处理的灵活性,还简化了控制器方法的设计。 #### 一、`@...

    Spring MVC 的注解使用实例

    在Spring MVC框架中,注解的使用极大地简化了配置,提高了开发效率。Spring MVC通过注解可以实现控制器、方法映射、模型数据绑定、视图解析等关键功能。本实例将深入探讨Spring MVC中常见的注解及其应用。 1. `@...

    SPRING MVC 的请求参数获取的几种方法

    在 SPRING MVC 中,可以使用 @ModelAttribute 注解获取 POST 请求的 FORM 表单数据。例如: ```java pojo public class Pojo{ private String a; private int b; } @RequestMapping(method = RequestMethod.POST)...

    Spring mvc 超简完整注解可运行Demo

    本示例提供了超简化的、完整的、注解驱动的 Spring MVC 应用程序,可以快速运行并观察其效果。以下是关于 Spring MVC 的关键知识点: 1. **注解驱动**:在 Spring MVC 中,注解被广泛用于简化配置。例如,`@...

    Mastering Spring MVC 4(2015.09)源码

    表单提交的数据可以直接绑定到控制器方法的参数上,通过@ModelAttribute注解实现。Hibernate Validator或JSR-303/JSR-349规范的验证可以集成到模型属性的验证中,确保输入数据的有效性。 拦截器(Interceptor)是...

    modelAttribute详解

    在深入探索Spring MVC框架的过程中,我们经常会遇到`@ModelAttribute`这个注解。它在处理HTTP请求时扮演着非常重要的角色。本文将详细介绍`@ModelAttribute`的功能、内部实现机制及其应用场景。 #### 功能概述 `@...

    Spring MVC 使用注解的示例讲解

    使用@ModelAttribute注解可以将方法的返回值自动添加到Model中,便于传递到视图。视图解析通常通过ViewResolver完成,例如,使用Thymeleaf模板引擎,视图名"users"会对应一个名为"users.html"的模板文件。 5. **...

    java spring mvc项目,通过URL地址传递对象参数给action.zip

    2. **@ModelAttribute注解** `@ModelAttribute`是Spring MVC中的一个关键注解,用于绑定请求参数到一个模型对象。当我们希望从URL中获取对象参数时,可以将该注解添加到控制器方法的参数前。 ```java @GetMapping...

    spring MVC 3.1 spring security 注解实现安全机制

    在Spring MVC中,我们可以使用@Controller和@RequestMapping等注解来声明控制器类和处理方法。@RequestMapping注解用于映射HTTP请求到特定的方法,这极大地提高了代码的可读性和维护性。此外,还可以通过@...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    这是 Spring MVC 中最核心的注解之一,用于定义请求映射。它可以应用于类级别或方法级别,以指定 URL 路径和 HTTP 方法(GET, POST 等)。在 `BbtForumController` 示例中,`@RequestMapping("/forum.do")` 用于类...

Global site tag (gtag.js) - Google Analytics