javascript
[Spring MVC] - @ModelAttribute使用
在Spring MVC里,@ModelAttribute通常使用在Controller方法的參數(shù)注解中,用于解釋model entity,但同時,也可以放在方法注解里。
如果把@ModelAttribute放在方法的注解上時,代表的是:該Controller的所有方法在調(diào)用前,先執(zhí)行此@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() {::}}在調(diào)用所有方法之前,都會先執(zhí)行preRun()方法。
?
我們可以把這個@ModelAttribute特性,應(yīng)用在BaseController當(dāng)中,所有的Controller繼承BaseController,即可實現(xiàn)在調(diào)用Controller時,先執(zhí)行@ModelAttribute方法。
比如權(quán)限的驗證(也可以使用Interceptor)等
下面是一個設(shè)置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中輸出為:
?
這里可以看到,運行的先后次序為:先調(diào)用getAccounts(),再調(diào)用index()。
總結(jié)
以上是生活随笔為你收集整理的[Spring MVC] - @ModelAttribute使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring bean加载多个配置文件
- 下一篇: 信息记录初步了解