[Spring MVC] - @ModelAttribute使用
在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使用相关推荐
- Spring MVC @ModelAttribute 数据绑定
前言 示例未经验证 Spring MVC @ModelAttribute 数据绑定 通过 WebDataBinder 将 @RequestMapping 方法的参数与 request 进行数据绑定 W ...
- spring mvc @ModelAttribute 基本类型 自定义对象解析流程
一.如果方法中参数为基本类型,则通过POST的表单或者GET参数会使用 RequestParamMethodArgumentResolver作为参数解析器进行转换.如果参数名和客户端传入的参数名不一样 ...
- Spring MVC @ModelAttribute 详解
1.@ModelAttribute注释void返回值的方法 [java] view plaincopy print? @Controller public class HelloModelContro ...
- Spring mvc @ModelAttribute
SpringMVC4.3 版本以后新加入 作用: 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行 出现在参数上,获取指定的数据给参数赋值. 属性: value:用于获取数据的 key.ke ...
- Spring MVC框架——Web开发框架
1.MVC设计模式 一般指MVC框架,M(Model)数据模型层,V(View)视图层,C(Controller)控制层. Controller层:获取用户的请求,处理相关业务逻辑,并成功跳转页面,负 ...
- Spring MVC常用注解说明
2019独角兽企业重金招聘Python工程师标准>>> 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 02 之前在使用Struts2实现MV ...
- 编写 Spring MVC 控制器的 14 个技巧
欢迎关注方志朋的博客,回复"666"获面试宝典 通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求.然后,控制器调用业务类来处理与业务相关的任务,然后将客户 ...
- 14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 译文:blog.csdn.net/Summer_Lyf/a ...
- 分享 14 个 Spring MVC 顶级技巧!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 通常,在Spring MVC中,我们编写一个控制器类来处理来自客户 ...
最新文章
- 查看微码的两种方式hmcaix
- 第五章:管理数据库存储结构
- selenium java 验证码_如何使用Selenium WebDriver和Java从图像(验证码)中读取文本
- autosys start_mins
- 如何分析request download状态一直处于running的问题
- MySQL远程实时备份binlog
- 大数据技术周报第 004 期
- Docker : 获取运行容器的IP地址
- Python导入jar包
- 转:计算机核心刊物(非SCI,EI)投稿指南
- Android动画居然还能这么写
- 希尔伯特变换(1)-基础理论
- gohost -- go 开发的命令行hosts配置管理工具 1
- 2021最新C++面试题(附答案)
- AI 智能头像生成神器|PhotoShot
- 使用navicat进行库表数据拷贝
- SPA(单页面)和MPA(多页面)的区别与优缺点
- 如何删除输入法:微软拼音
- PS2 键盘在win10下开机过程 收发的数据
- 初识Memcache---(2)使用memcache
热门文章
- 第一篇:数据库服务概述
- 非此即彼的逻辑错误_MBA逻辑攻略-逻辑知识大全,快来收藏吧!
- 从零开始html css,HTML/CSS从零开始-常用属性(三)
- 鸢尾花分类_机器学习:鸢尾花数据集--贝叶斯分类
- RDMA技术详解(一):RDMA概述
- asyncdata连接php,如何使用Nuxt和asyncData观察路由更改
- python 少儿趣味编程下载_趣味儿童编程软件(scratch)
- Linux文件系统属性权限chattr与lsattr命令
- 阿里巴巴Java开发规约IDEA插件安装及使用
- noip2016 换教室