亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spring的ModelAndView

系統(tǒng) 1587 0

ModelAndView的構(gòu)造方法有7個(gè)。但是它們都是相通的。這里使用無參構(gòu)造函數(shù)來舉例說明如何構(gòu)造ModelAndView實(shí)例。??


ModelAndView 類別就如其名稱所示,是代表了MVC Web程序中Model與View的對象,不過它只是方便您一次返回這兩個(gè)對象的holder,Model與View兩者仍是分離的概念。
最簡單的ModelAndView是持有View的名稱返回,之后View名稱被view resolver,也就是實(shí)作org.springframework.web.servlet.View接口的實(shí)例解析,例如 InternalResourceView或JstlView等等:

ModelAndView(String viewName)


如果您要返回Model對象,則可以使用Map來收集這些Model對象,然后設(shè)定給ModelAndView,使用下面這個(gè)版本的 ModelAndView:

ModelAndView(String viewName, Map model)


Map對象中設(shè)定好key與value值,之后可以在視圖中取出,如果您只是要返回一個(gè)Model對象,則可以使用下面這個(gè) ModelAndView版本:

ModelAndView(String viewName, String modelName, Object modelObject)


藉由modelName,您可以在視圖中取出Model并顯示。
ModelAndView類別提供實(shí)作View接口的對象來作View的參數(shù):

ModelAndView(View view)

ModelAndView(View view, Map model)

ModelAndView(View view, String modelName, Object modelObject)


一個(gè)例子是 org.springframework.web.servlet.view.RedirectView,ModelAndView預(yù)設(shè)是使 用forward來轉(zhuǎn)發(fā)請求結(jié)果至視圖,使用RedirectView的話,則會(huì)使用redirect將請求重導(dǎo)至視圖,例如:

public ModelAndView handleRequest(....) … {

??? ....

???

??? return?new ModelAndView(new RedirectView(this.getViewPage()));

}

....


在這邊,viewPage的地址是從服務(wù)器網(wǎng)頁根目錄開始指定,而不是Web應(yīng)用程序的根目錄,所以您的getViewPage()傳回的地 址必須像是 /springapp/pages/index.htm這樣的地址,其中springapp是您的Web應(yīng)用程序目錄。
使用forward的話,網(wǎng)址列上并不會(huì)出現(xiàn)被轉(zhuǎn)發(fā)的目標(biāo)地址,而且forward是在Web應(yīng)用程序之內(nèi)進(jìn)行,可以訪問Web應(yīng)用程序的 隱藏目錄,像是WEB-INF,然而forward只能在Web應(yīng)用程序中進(jìn)行,不能指定至其它的Web應(yīng)用程序地址。
使用redirect的話,是要求客戶端瀏覽器重新發(fā)出一個(gè)指定的請求地址,因此網(wǎng)址列上會(huì)出現(xiàn)被重導(dǎo)的目錄地址,重導(dǎo)的請求是由瀏覽器發(fā)出,所以不能 訪問Web應(yīng)用程序中的隱藏目錄,像是WEB-INF,然而重導(dǎo)是重新要求一個(gè)網(wǎng)頁,所以可以指定至其它的Web應(yīng)用程序地址。
DispatcherServlet會(huì)根據(jù)傳回的ModelAndView來解析View名稱,并處理給予的Model。View名稱的解析 是委托給實(shí) 作org.springframework.web.servlet.ViewResolver接口的實(shí)例,ViewResolver接口定義如下:

public?interface ViewResolver {

??? public view resolveViewName(String, Locale locale) throws ServletException;

}


  ViewResolver的一個(gè)實(shí)例是InternalResourceViewResolver,名稱解析完之后,實(shí)際的View繪制與Model轉(zhuǎn) 換處理是交給實(shí)作org.springframework.web.servlet.View的實(shí)例,View接口如下:

public?interface View {

??? public void render(Map model, HttpServletResquest resquest, HttpServletResponse response) throws ServletException, IOException;

}


View的實(shí)作之前用過 org.springframework.web.servlet.view.InternalResourceView,另外也還有JstlView、 TilesView、VelocityView等等的實(shí)作,分別進(jìn)行不同的表現(xiàn)展處理 。




ModelAndView()

這個(gè)構(gòu)造方法構(gòu)造出來的ModelAndView

不能直接使用,應(yīng)為它沒有指定view,也沒有綁定對應(yīng)的model對象。當(dāng)然,model對象不是必須的,但是view確實(shí)必須的。

用這個(gè)構(gòu)造方法構(gòu)造的實(shí)例主要用來在以后往其中加view設(shè)置和model對象。

給ModelAndView

實(shí)例設(shè)置view的方法有兩

個(gè):setViewName(String viewName) 和 setView(View view)。前者是使用view

name,后者是使用預(yù)先構(gòu)造好的View對象。其中前者比較常用。事實(shí)上View是一個(gè)接口,而不是一個(gè)可以構(gòu)造的具體類,我們只能通過其他途徑來獲取

View的實(shí)例。對于view

name,它既可以是jsp的名字,也可以是tiles定義的名字,取決于使用的ViewNameResolver如何理解這個(gè)view name。

如何獲取View的實(shí)例以后再研究。

而對應(yīng)如何給ModelAndView

實(shí)例設(shè)置model則比較復(fù)雜。有三個(gè)方法可以使用:

addObject(Object modelObject)

addObject(String modelName, Object modelObject)

addAllObjects(Map modelMap)

ModelAndView

可以接收Object類型的對象,ModelAndView

將它視為其眾多model中的一個(gè)。當(dāng)使用Object類型的對象的時(shí)候,必須指定一個(gè)名字。ModelAndView

也可以接收沒有明顯名字的對象,原因在于ModelAndView

將調(diào)用spring自己定義的Conventions 類的.getVariableName()方法來為這個(gè)model生成一個(gè)名字。顯然,對model而言,名字是必須的。

Conventions.getVariableName()生成名字的規(guī)則是使用對象的類名的小寫模式來作model名字。當(dāng)這個(gè)model是集合或數(shù) 組的時(shí)候,使用集合的第一個(gè)元素的類名加s來作model的名字。

ModelAndView

也可以接收Map類型的對象,ModelAndView

將這個(gè)Map中的元素視為model,而不是把這個(gè)Map本身視為model。但是其他的集合類可以用本身作為model對象。

實(shí)際上,ModelAndView

對model的支持來自于類ModelMap,這個(gè)類繼承自HashMap。

完整的例子

      
        public
      
      
         ModelAndView handleRequestInternal(
      
      
        HttpServletRequest request,
      
      HttpServletResponse response) 
      
        throws
      
      
         Exception {
      
      
    ModelAndView mav = new ModelAndView("hello"); // 實(shí)例化一 個(gè)VIew的ModelAndView實(shí)例     mav.addObject("message", "Hello World!"); // 添加一個(gè)帶名的model對象     return mav; }

?

轉(zhuǎn)自: http://blog.csdn.net/cpp_lzth/article/details/6014778

Spring的ModelAndView


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狼狼色丁香久久婷婷综合五月 | 美女超爽久久久久网站 | a在线视频 | 欧美成人26uuu欧美毛片 | 欧美在线中文 | 欧美一区二区三区高清视频 | 日韩欧美精品一区二区三区 | 国产毛片在线高清视频 | 欧美成成人免费 | 奇米第四色888 | 特级全黄一级毛片视频 | 伊人精品国产 | 综合久久久久6亚洲综合 | 天堂成人在线视频 | 色八a级在线观看 | 国产一级视频久久 | 美女狠狠干 | 日本在线高清不卡 | 97色精品视频在线观看免费 | 伊人色综合久久 | 国产亚洲精品自在线观看 | 日韩欧美一中字暮 | 中文字幕 亚洲一区 | 中文字幕中文字幕在线 | 久久99影院网久久久久久 | 狠狠狠狠狠狠 | 日本高清不卡在线 | 久久天天躁夜夜躁狠狠85麻豆 | 国产美女视频做爰 | 伊人狠狠丁香婷婷综合色 | 免费看黄色片视频 | 日韩一区二区在线视频 | 99福利视频 | 亚洲综合国产 | 欧美一级美片在线观看免费 | 亚洲伦理中文字幕一区 | 午夜一级视频 | 国产精品成在线观看 | 97色偷偷9999www | 人人干人人模 | 国内一区二区 |