在Spring MVC里,@ModelAttribute通常使用在Controller方法的参数注解中,用于解释model entity,但同时,也可以放在方法注解里。

如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法

比如我们有一个Controller:TestController

@Controller
@RequestMapping(value="test")
public class PassportController {@ModelAttributepublic void preRun() {System.out.println("Test Pre-Run");}@RequestMapping(method=RequestMethod.GET)public String index() {return "login/index";}@RequestMapping(value="login", method=RequestMethod.POST)public ModelAndView login(@ModelAttribute @Valid Account account, BindingResult result)::}@RequestMapping(value="logout", method=RequestMethod.GET)public String logout() {::}}

在调用所有方法之前,都会先执行preRun()方法。

我们可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

比如权限的验证(也可以使用Interceptor)等

下面是一个设置request和response的方式(这个未测试,不知有没线和安全问题)

package com.my.controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.web.bind.annotation.ModelAttribute;public class BaseController {protected HttpServletRequest request;  protected HttpServletResponse response;  protected HttpSession session;@ModelAttributepublic void setReqAndRes(HttpServletRequest request, HttpServletResponse response){  this.request = request;this.response = response;this.session = request.getSession();}}


@ModelAttribute也可以做为Model输出到View时使用,比如:

测试例子

package com.my.controller;import java.util.ArrayList;
import java.util.List;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import com.my.controller.bean.Account;@Controller
@RequestMapping(value="attr")
public class TestModelAttributeController {private static List<Account> accounts = new ArrayList<Account>();{accounts.add(new Account());accounts.add(new Account());Account ac1 = accounts.get(0);Account ac2 = accounts.get(1);ac1.setUserName("Robin");ac1.setPassword("123123");ac2.setUserName("Lucy");ac2.setPassword("123456");}@RequestMapping(method=RequestMethod.GET)public String index() {System.out.println("index");return "TestModelAttribute/index";}@ModelAttribute("accounts")public List<Account> getAccounts() {System.out.println("getAccounts");return accounts;}}

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="st" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TestModelAttribute</title>
</head>
<body><c:forEach items="${accounts}" var="item"><c:out value="${item.userName}"></c:out><br/></c:forEach>
</body>
</html>

页面将输出:

在Console中输出为:

这里可以看到,运行的先后次序为:先调用getAccounts(),再调用index()。

[Spring MVC] - @ModelAttribute使用相关推荐

  1. Spring MVC @ModelAttribute 数据绑定

    前言 示例未经验证 Spring MVC @ModelAttribute 数据绑定 通过 WebDataBinder 将 @RequestMapping 方法的参数与 request 进行数据绑定 W ...

  2. spring mvc @ModelAttribute 基本类型 自定义对象解析流程

    一.如果方法中参数为基本类型,则通过POST的表单或者GET参数会使用 RequestParamMethodArgumentResolver作为参数解析器进行转换.如果参数名和客户端传入的参数名不一样 ...

  3. Spring MVC @ModelAttribute 详解

    1.@ModelAttribute注释void返回值的方法 [java] view plaincopy print? @Controller public class HelloModelContro ...

  4. Spring mvc @ModelAttribute

    SpringMVC4.3 版本以后新加入 作用: 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行 出现在参数上,获取指定的数据给参数赋值. 属性: value:用于获取数据的 key.ke ...

  5. Spring MVC框架——Web开发框架

    1.MVC设计模式 一般指MVC框架,M(Model)数据模型层,V(View)视图层,C(Controller)控制层. Controller层:获取用户的请求,处理相关业务逻辑,并成功跳转页面,负 ...

  6. Spring MVC常用注解说明

    2019独角兽企业重金招聘Python工程师标准>>>     使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02     之前在使用Struts2实现MV ...

  7. 编写 Spring MVC 控制器的 14 个技巧

    欢迎关注方志朋的博客,回复"666"获面试宝典 通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求.然后,控制器调用业务类来处理与业务相关的任务,然后将客户 ...

  8. 14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 译文:blog.csdn.net/Summer_Lyf/a ...

  9. 分享 14 个 Spring MVC 顶级技巧!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 通常,在Spring MVC中,我们编写一个控制器类来处理来自客户 ...

最新文章

  1. 查看微码的两种方式hmcaix
  2. 第五章:管理数据库存储结构
  3. selenium java 验证码_如何使用Selenium WebDriver和Java从图像(验证码)中读取文本
  4. autosys start_mins
  5. 如何分析request download状态一直处于running的问题
  6. MySQL远程实时备份binlog
  7. 大数据技术周报第 004 期
  8. Docker : 获取运行容器的IP地址
  9. Python导入jar包
  10. 转:计算机核心刊物(非SCI,EI)投稿指南
  11. Android动画居然还能这么写
  12. 希尔伯特变换(1)-基础理论
  13. gohost -- go 开发的命令行hosts配置管理工具 1
  14. 2021最新C++面试题(附答案)
  15. AI 智能头像生成神器|PhotoShot
  16. 使用navicat进行库表数据拷贝
  17. SPA(单页面)和MPA(多页面)的区别与优缺点
  18. 如何删除输入法:微软拼音
  19. PS2 键盘在win10下开机过程 收发的数据
  20. 初识Memcache---(2)使用memcache

热门文章

  1. 第一篇:数据库服务概述
  2. 非此即彼的逻辑错误_MBA逻辑攻略-逻辑知识大全,快来收藏吧!
  3. 从零开始html css,HTML/CSS从零开始-常用属性(三)
  4. 鸢尾花分类_机器学习:鸢尾花数据集--贝叶斯分类
  5. RDMA技术详解(一):RDMA概述
  6. asyncdata连接php,如何使用Nuxt和asyncData观察路由更改
  7. python 少儿趣味编程下载_趣味儿童编程软件(scratch)
  8. Linux文件系统属性权限chattr与lsattr命令
  9. 阿里巴巴Java开发规约IDEA插件安装及使用
  10. noip2016 换教室