SpringMVC中@ModelAttribute註解的作用
[email protected]註釋void返回值的方法
[java] view plain copy print?- @Controller
- public class HelloModelController {
- @ModelAttribute
- public void populateModel(@RequestParam String abc, Model model) {
- model.addAttribute("attributeName", abc);
- }
-
@RequestMapping
- public String helloWorld() {
- return "helloWorld.jsp";
- }
- }
在這個程式碼中,訪問控制器方法helloWorld時,會首先呼叫populateModel方法,將頁面引數abc(/helloWorld.ht?abc=text)放到model的attributeName屬性中,在檢視中可以直接訪問。
jsp頁面頁面如下:
[html] view plain copy print?-
<%@ page language
- 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>
[email protected]
- @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>
也可以指定屬性名稱
[java] view plain copy print?
- @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中如下訪問:
[html] view plain copy print?
- <c:out value="${myUser.account}"></c:out>
物件合併:
[java] view plain copy print?- @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";
- }
- }
物件合併指定物件名稱:
[java] view plain copy print?- @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中可以使用如下方式訪問
[html] view plain copy print?- <c:out value="${myUser.name}"></c:out>
- <c:out value="${myUser.account}"></c:out>
3.通過此特性控制權限.
我們可以在基類方法中控制寫此註解,需要控制權限的控制器,繼承控制器就可以了。
[java] view plain copy print?- public class BaseController {
- @ModelAttribute
- public void populateModel() throws Exception {
- SysUser user=ContextUtil.getCurrentUser();
- if(user.getAccount().equals("admin")){
- throw new Exception("沒有許可權");
- }
- }
- }
需要控制權限的類繼承BaseController [java] view plain copy print?
- @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);功能類似。
[java] view plain copy print?- public String test(@ModelAttribute("user") UserModel user)
此處多了一個註解@ModelAttribute("user"),它的作用是將該繫結的命令物件以“user”為名稱新增到模型物件中供檢視頁面展示使用。我們此時可以在檢視頁面使用${user.username}來獲取繫結的命令物件的屬性。
②暴露@RequestMapping 方法返回值為模型資料:放在功能處理方法的返回值上時,是暴露功能處理方法的返回值為模型資料,用於檢視頁面展示時使用。
[java] view plain相關推薦
SpringMVC中@ModelAttribute註解的作用
[email protected]註釋void返回值的方法 [java] view plain copy print? @Controller public class HelloModelController { @Mo
關於springMVC中@ModelAttribute註解的隱含model屬性名
springMVC中對現有的部落格的小補充 宣告:本人菜鳥一個,這次是第一次寫部落格,可能格式有點不好,請見諒, 如有不正確歡迎前來斧正。 序言:寫這篇部落格的原因:是我在使用一個框架時遇到的問題,百度了很多部落格和知乎等等都沒有什麼收穫,後來弄
springMVC中@ModelAttribute與@SessionAttributes註解一起使用時容易引發的異常
當使用@ModelAttribute註解時,會取@ModelAttribute的value值,若@ModelAttribute的value值是空串(即沒有配置@ModelAttribute的value屬性),則會將當前用@ModelAttribute修飾的方法
springMVC中的註解@RequestParam與@PathVariable的區別
actor nal lencod mat 控制 關系 tor oid 沒有 @PathVariable綁定URI模板變量值 @PathVariable是用來獲得請求url中的動態參數的 @PathVariable用於將請求URL中的模板變量映射到功能處理方法的參數上。//配
SpringMvc中@ModelAttribute的運用
獲取對象 urn tgui mapping pri return 嘗試 bind 類型 /** * 1. 有 @ModelAttribute 標記的方法, 會在每個目標方法執行之前被 SpringMVC 調用! * 2. @ModelAttribute 註解也可以來
springmvc中@requestbody註解接收請求引數
一、POST請求的四種常用方式 1、application/x-www-form-urlencoded 瀏覽器原生的表單,值為urlencoded之後的 key1=value1&key2=value2...... 2、multipart/form-data
springmvc中@requestbody註解接收請求參數
pri 傳輸 四種 文件表 multi post 傳輸文件 解析json 方式 一、POST請求的四種常用方式 1、application/x-www-form-urlencoded 瀏覽器原生的表單,值為urlencoded之後的 key1=value1&a
Spring MVC中@ModelAttribute註解
Spring MVC中,@ModelAttribute註解主要功能: 1、標註在引數上進行資料繫結,將前端上送的引數按照名稱繫結到指定物件中,並且將該物件自動加入ModelMap中,後續可供View層使用。 2、標註在方法上,會在每一個@RequestMapping標
Springmvc中 @ModelAttribute的用法
至於 @ModelAttribute 適用場合在修改資料上,作用在方法上, 好,下面就上程式碼,看看@ModelAttribute它的用法,說一個簡單的實列: 1.比如,在我的一個介面上,我要修改資料:我會點選一個連線進入我的controller類,先找到這個物件:
springmvc的ModelAttribute註解,在controller每個方法執行前被執行
先看一個沒有使用@ModelAttribute的Controller方法. @RequestMapping("/save") public String save(User user) { user.setUsername("U love me")
SpringMVC 中Transactional註解的巨坑
最近的一個專案中對資料庫事務的處理要求比較嚴格。比如要完成業務A,需要完成操作1和操作2, 如果操作1失敗,則業務A要整體回滾;如果操作2失敗, 則僅需回滾操作2的資料,操作1的資料要留下來。因此整個業務算是兩個事務。 發現的問題 以前並沒有認真整理過程式碼
springmvc的ModelAttribute註解
參考資料:spring-framework-reference的Using @ModelAttribute on a method和Using @ModelAttribute on a method argument先看一個沒有使用@ModelAttribute的Contr
springmvc中@requestbody註解接收前端引數使用content-type型別
最近程式碼遇見了一個springmvc中的小問題,算是很基礎的東西,同事問我後我有有些迷惑上網找了一些資料後弄清楚了。特此記錄一下 首先是後臺程式碼使用springmvc註解@requestbody,
關於springmvc中註解@ModelAttribute的bean(物件引數)問題
環境:jdk6 sping3.2.3 oracle10g 問題闡述: 我通過jsp提交一個表單,然後通過js方法$('#id').submit()函式,提交表單,通過post提交表單如下: 我在springmvc的controller接受時,如下: 顯然 我是通過b
SpringMVC中的一些註解
gmv pub pan else bsp break () 獲取參數 false @Controller:表明該類是一個Controller; @RequestMapping(參數) :為類或者方法定義一個url @RequestParam(value = "id" ):
SpringBoot中@EnableAutoConfiguration註解的作用
springboot enable auto 在這個註解中,最重要的是它導入了一個類EnableAutoConfigurationImportSelector它是一個ImportSelector接口的實現類,而ImportSelector接口中的selectImports方法所返回的類將被Spri
總結本次實訓中springMVC中常用的註解@,以後用到別的會持續更新
col ring key值 ppi div jsp頁面 ajax請求 map spa @Repository //dao層註解。聲明本層為dao層。 @serivce //service層。 @controller //con層。 @auto
SpringMVC中用於綁定請求數據的註解以及配置視圖解析器
SpringMVC 視圖解析器 @RequestHeader 綁定集合參數 @CookieValue SpringMVC中用於綁定請求數據的註解 在上一篇文章中我們簡單介紹了@RequestMapping與@RequestParam註解,知道了如何去配置地址映射,本篇則介紹一些用於處理re
Kotlin中使用註解框架不起作用
Butter Knife Kotlin中註解失效 Kotlin開發問題 問題 在Kotlin中使用註解框架,發現在編譯的時候註解的字段沒有生效。 原因 由於Kotlin是基於jvm運行時的開發語言,所以需要單獨對它引入註解環境 解決方法: 這個方式是基於Gradle方式的,如使用開發工具Inter
大佬教你在springMVC中使用dubbo註解配置的問題
ica .get -s sta for dispatch 自動 xtu ces 問題,在controller中無法通過註解自動註入dubbo服務,但是在service中可以自動註入。package com.sl;@Controllerbr/>//期望註入dubbo服務@Re