springmvc ModelAttribute 注釋的學(xué)習(xí)

@ModelAttribute 注解可被應(yīng)用在方法或方法參數(shù)上

  • 對方法使用@ModelAttribute注解######

注解在方法上的 @ModelAttribute 說明了方法的作用是用于添加一個或多個屬性到model上妥泉。
這樣的方法能接受與 @RequestMapping 注解相同的參數(shù)類型山叮,只不過不能直接被映射到具體的請求上怜械。
在同一個控制器中番宁,注解了 @ModelAttribute 的方法實(shí)際上會在 @RequestMapping 方法之前被調(diào)用
在方法使用@ModelAttribute 方法的兩種風(fēng)格委粉,詳情示例代碼如下:

public class Account implements Serializable {
   private static final long serialVersionUID = -3075041060818483817L;

   private String name;
   private Integer age;
   //  getter and setter
}
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/modelAtt")
public class ModeAttributeTest {
    /**
     * 方法-:
     * 方法通過返回值的方式默認(rèn)地將添加一個屬性
     *
     * 屬性名沒有被顯式指定的時:框架將根據(jù)屬性的類型給予一個默認(rèn)名稱
     *                  例如:本例返回一個 Account 類型的對象野芒,則默認(rèn)的屬性名為"account"
     *                  你可以通過設(shè)置 @ModelAttribute 注解的值來改變默認(rèn)值  @ModelAttribute("myAccount")
     * @param name
     * @return
     */
    @ModelAttribute
    public Account addAccount(@RequestParam(value = "name",defaultValue = "test")String name) {
        Account ac = new Account();

        ac.setName(name);
        ac.setAge(12);

        return ac;
    }
    /**
     * 方法二:
     *  方法接收一個 Model 對象蓄愁,然后可以向其中添加任意數(shù)量的屬性
     * @param number
     * @param model
     */
    @ModelAttribute
    public void populateModel(@RequestParam(value = "number",defaultValue = "123") String number, Model model) {
        model.addAttribute("number", number);
        model.addAttribute("other", "other");
    }

    @RequestMapping("/hello")
    public ModelAndView hello(){
        ModelAndView modelAndView = new ModelAndView("hello");

        return modelAndView;
    }
}

相關(guān)頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
賬戶名稱:${account.name}<br/>
年齡:${account.age}<br/>
number:${number}<br/>
other:${other}<br/>
</body>
</html>

請求:http://localhost:8085/modelAtt/hello?name=zhangsan&number=123
@ModelAttribute 方法通常被用來填充一些公共需要的屬性或數(shù)據(jù),比如一個下拉列表所預(yù)設(shè)的幾種狀態(tài)狞悲,或者寵物的幾種類型涝登,或者去取得一個HTML表單渲染所需要的命令對象,比如 Account 等

注意
@ModelAttribute 注解也可以被用在 @RequestMapping 方法上效诅。這種情況下胀滚, @RequestMapping 方法的返回值將會被解釋為model的一個屬性,而非一個視圖名乱投。此時視圖名將以視圖命名約定來方式來決議咽笼,與返回值為void的方法所采用的處理方法類似

以我的配置為例

<!-- 視圖解析 -->
<bean id="jspViewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="order" value="2" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>
@Controller
@RequestMapping("/modelAtt")
public class ModeAttributeTest {
    @ModelAttribute("key")
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

此時在瀏覽器中請求/hello 時,會去找/WEB-INF/jsp/modelAtt/hello.jsp此頁面戚炫,并可在頁面中獲取附帶的數(shù)據(jù)${key}

  • 在方法參數(shù)上使用@ModelAttribute注解######

注解在方法參數(shù)上的 @ModelAttribute 說明了該方法參數(shù)的值將由model中取得剑刑。如果model中找不到,那么該參數(shù)會先被實(shí)例化,然后被添加到model中施掏。在model中存在以后钮惠,請求中所有名稱匹配的參數(shù)都會填充到該參數(shù)中。這在Spring MVC中被稱為數(shù)據(jù)綁定七芭,一個非常有用的特性素挽,節(jié)約了你每次都需要手動從表格數(shù)據(jù)中轉(zhuǎn)換這些字段數(shù)據(jù)的時間。

@RequestMapping("/hello")
public ModelAndView hello(@ModelAttribute Account account){
    account.setAge(12);
    account.setName("456");
    return new ModelAndView("hello");
}

上面的代碼只是一種簡單的使用方法
其實(shí)account的來源可由以下幾種方式獲得

  • 它可能因?yàn)?@SessionAttributes 注解的使用已經(jīng)存在于model中
  • 它可能因?yàn)樵谕瑐€控制器中使用了 @ModelAttribute 方法已經(jīng)存在于model中
  • 它可能是由URI模板變量和類型轉(zhuǎn)換中取得的
  • 它可能是調(diào)用了自身的默認(rèn)構(gòu)造器被實(shí)例化出來的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狸驳,一起剝皮案震驚了整個濱河市预明,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耙箍,老刑警劉巖撰糠,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辩昆,居然都是意外死亡阅酪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門汁针,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遮斥,“玉大人,你說我怎么就攤上這事扇丛∈趼穑” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵帆精,是天一觀的道長较屿。 經(jīng)常有香客問我,道長卓练,這世上最難降的妖魔是什么隘蝎? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮襟企,結(jié)果婚禮上嘱么,老公的妹妹穿的比我還像新娘。我一直安慰自己顽悼,他們只是感情好曼振,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔚龙,像睡著了一般冰评。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上木羹,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天甲雅,我揣著相機(jī)與錄音解孙,去河邊找鬼。 笑死抛人,一個胖子當(dāng)著我的面吹牛弛姜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妖枚,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼廷臼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盅惜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忌穿,失蹤者是張志新(化名)和其女友劉穎抒寂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掠剑,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屈芜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了朴译。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片井佑。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眠寿,靈堂內(nèi)的尸體忽然破棺而出躬翁,到底是詐尸還是另有隱情,我是刑警寧澤盯拱,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布盒发,位于F島的核電站,受9級特大地震影響狡逢,放射性物質(zhì)發(fā)生泄漏宁舰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一奢浑、第九天 我趴在偏房一處隱蔽的房頂上張望蛮艰。 院中可真熱鬧,春花似錦雀彼、人聲如沸壤蚜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仍律。三九已至,卻和暖如春实柠,著一層夾襖步出監(jiān)牢的瞬間水泉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留草则,地道東北人钢拧。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像炕横,于是被迫代替她去往敵國和親源内。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring的模型-視圖-控制器(MVC)框架是圍繞一個DispatcherServlet來設(shè)計(jì)的份殿,這個Servl...
    alexpdh閱讀 2,647評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理膜钓,服務(wù)發(fā)現(xiàn),斷路器卿嘲,智...
    卡卡羅2017閱讀 134,667評論 18 139
  • 1颂斜、@Controller 在SpringMVC 中,控制器Controller 負(fù)責(zé)處理由DispatcherS...
    圣光會制裁你丨閱讀 1,675評論 0 23
  • 1拾枣、Spring MVC請求流程 (1)初始化:(對DispatcherServlet和ContextLoderL...
    拾壹北閱讀 1,948評論 0 12
  • 在五月天演唱會上琉用,阿信唱《溫柔》時姨蝴,曾這樣說:“有帶手機(jī)嗎俊啼?拿出來,打給你喜歡的人左医,把這首溫柔傳給他吨些。”接著炒辉,現(xiàn)場...
    九霄雲(yún)客_閱讀 1,727評論 0 1