博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Spring MVC] - @ModelAttribute使用
阅读量:5989 次
发布时间:2019-06-20

本文共 3348 字,大约阅读时间需要 11 分钟。

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

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

 

比如我们有一个Controller:TestController

@Controller@RequestMapping(value="test")public class PassportController {    @ModelAttribute    public 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;          @ModelAttribute    public 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
accounts = new ArrayList
(); { 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
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"%>
TestModelAttribute

页面将输出:

在Console中输出为:

 

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

转载地址:http://bxjlx.baihongyu.com/

你可能感兴趣的文章
Sublime写作
查看>>
Nginx流量拷贝模块—ngx_http_mirror_module分析
查看>>
我的友情链接
查看>>
.net面试题集锦(1
查看>>
Xcode4.2中的strong的解释
查看>>
MongoDB 的 GridFS 详细分析
查看>>
pfsense 2.3企业应用-WEB管理向导
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Xshell基础优化
查看>>
Apache与Nginx的优缺点比较
查看>>
haproxy+keepalived(主从模式)实现高可用环境的简单配置
查看>>
基于802.1x协议的接入认证简单实现
查看>>
file-max与ulimit的关系与差别
查看>>
IBM小型机远程管理,HMC连接到P5
查看>>
如何有效使用Project(2)——进度计划的执行与监控
查看>>
配置Spring发送邮件
查看>>
我的友情链接
查看>>
LANMP安装
查看>>
职业发展
查看>>