SpringMVC中的Model對象用法說明
模型對象的作用主要是保存數(shù)據(jù),可以借助它們將數(shù)據(jù)帶到前端。
常用的模型對象有以下幾個(gè):
ModelAndView
(顧名思義,模型和視圖,既可以攜帶數(shù)據(jù)信息,也可以攜帶視圖信息,常規(guī)用法如下)
/** * ModelAndView 綁定數(shù)據(jù)到視圖 (ModelMap用于傳遞數(shù)據(jù) View對象用于跳轉(zhuǎn)) * @return * @throws Exception */ @RequestMapping(value="/case2") public ModelAndView case2() throws Exception { ModelAndView mav = new ModelAndView(); mav.setViewName("/demo03/model.jsp"); mav.addObject("sex", "boy"); return mav; }
Map
,和modelAndView
原理一樣,同樣是將數(shù)據(jù)一個(gè)一個(gè)放在requestScope
中,前端取數(shù)據(jù)同樣也是${模型數(shù)據(jù)}
/** * 目標(biāo)方法可以添加 Map 類型(實(shí)際上也可以是 Model 類型或 ModelMap 類型)的參數(shù). * @param map * @return */ @RequestMapping("/case") public String case1(Map map) throws Exception{ map.put("sex", "獲取成功!!"); return "/demo03/model.jsp"; }
@SessionAttributes
(相當(dāng)于創(chuàng)建session
對象,往session
對象里放數(shù)據(jù),這里用一個(gè)注解完美解決)
基本格式如下:
/** * @SessionAttributes 除了可以通過屬性名指定需要放到會(huì)話中的屬性外(實(shí)際上使用的是 value 屬性值), * 還可以通過模型屬性的對象類型指定哪些模型屬性需要放到會(huì)話中(實(shí)際上使用的是 types 屬性值) * 注意: 該注解只能放在類的上面. 而不能修飾方法當(dāng)于在map中和session中 各存放了一個(gè)實(shí)體類,一個(gè)String類的字符串 */ @SessionAttributes("user") @Controller public class SessionController { @ModelAttribute("user") public User getUser(){ User user = new User(); return user; } /** * http://localhost:8080/s/s1?id=1 * 請求轉(zhuǎn)發(fā) forward: 不需要任何處理 * 請求重定向 redirect: 使用SessionAttribute方式 用于在重定向中傳至 將值存儲(chǔ)在session中 【用完記住清除】 * @return * @throws Exception */ @RequestMapping(value="/s1",method=RequestMethod.GET) public String case1(@ModelAttribute("user") User user) throws Exception{ return "redirect:/s2"; } @RequestMapping(value="/s2",method=RequestMethod.GET) public String case2(Map map,HttpServletResponse res,SessionStatus sessionStatus) throws Exception{ User user=(User)map.get("user"); res.getWriter().println(user.getId()); sessionStatus.setComplete(); return null; } }
SpringMVC中的Model和ModelAndView的區(qū)別
1.主要區(qū)別
Model
是每次請求中都存在的默認(rèn)參數(shù),利用其addAttribute()
方法即可將服務(wù)器的值傳遞到jsp
頁面中;
ModelAndView
包含model
和view
兩部分,使用時(shí)需要自己實(shí)例化,利用ModelMap
用來傳值,也可以設(shè)置view
的名稱
2.例子
1)使用Model
傳值
@RequestMapping(value="/list-books") private String getAllBooks(Model model){ logger.error("/list-books"); List<Book> books= bookService.getAllBooks(); model.addAttribute("books", books); return "BookList"; }
在jsp
頁面利${books}
即可取出其中的值
2)使用ModelAndView
傳遞值有兩種方法,不同方法在jsp
頁面的取值方式不同,同時(shí)設(shè)置了view
的名稱
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { LibraryException le=null; if(ex instanceof LibraryException){ le=(LibraryException)ex; }else{ le=new LibraryException("系統(tǒng)未知異常!"); } ModelAndView modelAndView=new ModelAndView(); modelAndView.addObject("exception",le.getMessage()); modelAndView.getModel().put("exception",le.getMessage()); modelAndView.setViewName("error"); return modelAndView; }
jsp
中${requestScope.exception1}
可以取出exception1
的值;
jsp
中${exception2}
可以取出exception2
的值
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類操作
這篇文章主要介紹了java根據(jù)不同的參數(shù)調(diào)用不同的實(shí)現(xiàn)類操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09java正則表達(dá)式表單驗(yàn)證類工具類(驗(yàn)證郵箱、手機(jī)號(hào)碼、qq號(hào)碼等)
這篇文章主要介紹了java使用正則表達(dá)式進(jìn)行表單驗(yàn)證工具類,可以驗(yàn)證郵箱、手機(jī)號(hào)碼、qq號(hào)碼等方法,需要的朋友可以參考下2014-04-04Java利用三目運(yùn)算符比較三個(gè)數(shù)字的大小
今天小編就為大家分享一篇關(guān)于Java利用三目運(yùn)算符比較三個(gè)數(shù)字的大小,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Java日期格式化的實(shí)現(xiàn)(@JsonFormat和@JSONField)
本文主要介紹了Java日期格式化的實(shí)現(xiàn),主要介紹了@JsonFormat和@JSONField兩種方式,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05SpringBoot使用Jackson配置全局時(shí)間日期格式
本文主要介紹了SpringBoot使用Jackson配置全局時(shí)間日期格式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05mybatis如何根據(jù)表逆向自動(dòng)化生成代碼實(shí)例
逆向工程是一個(gè)專門為 MyBatis 框架使用者設(shè)計(jì)的代碼生成器,可以根據(jù)數(shù)據(jù)庫中的表字段名,自動(dòng)生成 POJO 類,mapper 接口與 SQL 映射文件,這篇文章主要給大家介紹了關(guān)于mybatis如何根據(jù)表逆向自動(dòng)化生成代碼的相關(guān)資料,需要的朋友可以參考下2021-08-08