1. 主页 > 大智慧

Spring中ModelAndView的5种常用方法详解:从基础到实战应用

鍝庯紝浣犲垰瀛pring鐨勬椂鍊欙紝鏈夋病鏈夐亣鍒拌繃杩欑鎯呭喌锛熸槑鏄庢暟鎹兘瀛樺ソ浜嗭紝椤甸潰姝绘椿鏄剧ず涓嶅嚭鏉ワ紱鎴栬€呮兂璺宠浆涓鍥撅紝缁撴灉娴忚鍣ㄧ洿鎺ユ姤404銆傚埆鎱岋紝浠婂ぉ鍜变滑灏卞敔鍞犺繖涓晳鍦虹鍣ㄢ€斺€斺€?strong>鈥婱odelAndView鈥?/strong>鈥嬶紝淇濆噯浣犲惉瀹岀洿鎷嶅ぇ鑵匡細"鍘熸潵杩樿兘杩欎箞鐜╋紒"


涓€銆佸暐鏄疢odelAndView锛熷厛鎼炴噦杩欎釜鍐嶈锛?/h3>

绠€鍗曠矖鏆村湴璇达紝瀹冨氨鏄€?strong>鈥嬫暟鎹揩閫掑憳+瀵艰埅浠€?/strong>鈥嬬殑缁撳悎浣撱€備妇涓牀瀛愶紝浣犲幓椁愬巺鐐硅彍锛圕ontroller澶勭悊璇锋眰锛夛紝鏈嶅姟鍛樺緱鎶婅彍绔笂妗岋紙杩斿洖瑙嗗浘锛夛紝杩樺緱鎹庡甫璋冩枡鐡讹紙浼犻€掓暟鎹級瀵瑰惂锛烳odelAndView灏辨槸骞茶繖涓椿鐨勶紒

鈥?strong>鈥嬩笁涓牳蹇冨姛鑳解€?/strong>鈥嬬粰浣犲垝閲嶇偣锛?/p>

  • 馃摝 鎵撳寘瑕佷紶缁欓〉闈㈢殑鏁版嵁锛圡odel閮ㄥ垎锛?/li>
  • 馃椇锔?鍛婅瘔Spring璇ュ線鍝釜椤甸潰璺筹紙View閮ㄥ垎锛?/li>
  • 鈿?鏀寔閾惧紡璋冪敤锛堝啓浠g爜璐兼祦鐣咃級

浜屻€?澶у繀鏉€鎶€锛屼粠闈掗摐鍒扮帇鑰?/h3>

1. 绌烘墜閬撹捣鎵嬪紡鈥斺€旀棤鍙傛瀯閫犲嚱鏁?/h4>
java澶嶅埗
ModelAndView mav = new ModelAndView();
mav.addObject("msg", "娆㈣繋鏂板悓瀛︼紒");
mav.setViewName("welcome");

鈥?strong>鈥嬮€傚悎鍦烘櫙鈥?/strong>鈥嬶細闇€瑕佸垎姝ユ搷浣滄椂锛屽氨鍍忔惌绉湪涓€鏍锋參鎱㈢粍瑁呫€備笉杩囪瀹炶瘽锛岃繖绉嶅啓娉曠幇鍦ㄧ敤寰楀皯浜嗭紝姣曠珶鍚庨潰鏈夋洿棣欑殑鍐欐硶绛夌潃鍜变滑銆?/p>

鈥?strong>鈥嬫暡榛戞澘鈥?/strong>鈥嬶細璁板緱鏈€鍚庝竴瀹氳setViewName锛屼笉鐒跺氨鍍忓瘎蹇€掓病鍐欏湴鍧€锛屼笢瑗块€佸摢鍘伙紵


2. 涓€姝ュ埌浣嶈鏁版嵁鈥斺€斿甫Model鍙傛暟鐨勬瀯閫?/h4>
java澶嶅埗
Map params = new HashMap<>();
params.put("userCount", 158);
ModelAndView mav = new ModelAndView("dashboard", params);

鈥?strong>鈥嬩紭鍔垮姣旇〃鈥?/strong>鈥嬶細

鏂规硶浠g爜琛屾暟鍙鎬?/th>閫傚悎鍦烘櫙
鏃犲弬鏋勯€犲嚱鏁?/td>3琛?/td>涓€鑸?/td>澶嶆潅鏁版嵁缁勮
甯odel鍙傛暟鐨勬瀯閫?/td>2琛?/td>浼樼宸叉湁鐜版垚鏁版嵁闆嗗悎

鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細鏈変簺鏂版墜浼氭妸Map鐨勬硾鍨嬪啓鎴?string,>锛岀粨鏋滀紶涓猆ser瀵硅薄杩涘幓鐩存帴鍘熷湴鐖嗙偢锛屽崈涓囨敞鎰忔暟鎹被鍨嬪尮閰嶏紒


3. 鑺卞紡浼犲弬娉曗€斺€攁ddObject鍏ㄥ妗?/h4>
java澶嶅埗
// 鏈€甯哥敤濮垮娍
mav.addObject("currentUser", user);

// 闅愯棌鎶€鑳斤細涓嶆寚瀹歬ey鍚?/span>
mav.addObject(user); // 鑷姩鍙栫被鍚嶉瀛楁瘝灏忓啓锛坲ser锛?/span>

// 涓€娆″澶氫釜
mav.addAllObjects(paramsMap);

鈥?strong>鈥嬩釜浜哄績寰椻€?/strong>鈥嬶細鍒氬紑濮嬪鐨勬椂鍊欐€荤籂缁搆ey鍚嶆€庝箞璧凤紝鍚庢潵鍙戠幇鑷姩鍛藉悕鏄湡棣欙紒涓嶈繃鍥㈤槦寮€鍙戞椂杩樻槸寤鸿鏄惧紡鍛藉悕锛岄槻姝㈠悗闈㈠悓浜嬬湅浠g爜涓€鑴告嚨銆?/p>


4. 瑙嗗浘璺宠浆榛戠鎶€鈥斺€攕etViewName鐨勫鐢?/h4>
java澶嶅埗
// 鏅€氭ā寮?/span>
mav.setViewName("redirect:/login"); // 閲嶅畾鍚?/span>

// 杩涢樁鐜╂硶
mav.setViewName("forward:/api/getData"); // 璇锋眰杞彂

// 鍐风煡璇嗭細杩樿兘鐩存帴new瑙嗗浘瀵硅薄
mav.setView(new RedirectView("/home"));

鈥?strong>鈥嬭娉暀璁€?/strong>鈥嬶細鏈夋蹇樹簡鍐?redirect:"鍓嶇紑锛岀粨鏋滅洿鎺ヨ烦杞埌/WEB-INF/views/redirect:/login.jsp锛岀洿鎺?04璀﹀憡锛佸悇浣嶅紩浠ヤ负鎴掑晩銆?/p>


5. 閾惧紡缂栫▼鈥斺€旇閫煎繀澶?/h4>
java澶嶅埗
return new ModelAndView("report")
        .addObject("sales", salesData)
        .addObject("chartType", "3D鏌辩姸鍥?);

鈥?strong>鈥嬩紭鍔垮垎鏋愨€?/strong>鈥嬶細

  • 浠g爜琛屾暟鍘嬬缉50%
  • 涓嶇敤璧蜂复鏃跺彉閲忓悕
  • 璇昏捣鏉ュ儚鑷劧璇█

涓嶈繃瑕佹彁閱掕悓鏂帮紝鍒负浜嗛摼寮忚€岄摼寮忥紝閬囧埌澶嶆潅閫昏緫杩樻槸鍒嗘鍐欐洿绋冲Ε銆?/p>


涓夈€佸疄鎴樹腑鐨勯獨鎿嶄綔

鏈€杩戠粰鐢靛晢椤圭洰鍋氳鍗曡鎯呴〉锛岄亣鍒颁釜鍏稿瀷鍦烘櫙锛氭棦瑕佹樉绀鸿鍗曟暟鎹紝鍙堣璺宠浆鍒版敮浠橀〉闈€傜敤ModelAndView鍙互杩欎箞鐜╋細

java澶嶅埗
ModelAndView mav = new ModelAndView("payment");
mav.addObject("order", orderService.getLatestOrder(userId));
mav.addObject("paymentTypes", Arrays.asList("寰俊","鏀粯瀹?,"閾惰仈"));

鈥?strong>鈥嬪叧閿偣鈥?/strong>鈥嬶細鎶婁笟鍔℃煡璇㈢洿鎺ュ祵濂楀湪閾惧紡璋冪敤閲岋紝鏃繚鎸佷簡浠g爜鏁存磥锛屽張鎶婇〉闈㈤渶瑕佺殑鏁版嵁涓€娆℃€у榻愩€?/p>


鍥涖€佷綘鍙兘浼氳俯鐨勫潙

  1. 鈥?strong>鈥嬩贡鐢ㄩ噸瀹氬悜瀵艰嚧鏁版嵁涓㈠け鈥?/strong>鈥嬶細璁颁綇閲嶅畾鍚戞槸涓ゆ璇锋眰锛岃鐢≧edirectAttributes瀛樻暟鎹?/li>
  2. 鈥?strong>鈥嬭鍥捐矾寰勫啓閿欌€?/strong>鈥嬶細鏄庢槑鏂囦欢鍦?WEB-INF/views涓嬶紝闈炶鍐欏叏璺緞
  3. 鈥?strong>鈥嬬嚎绋嬪畨鍏ㄩ棶棰樷€?/strong>鈥嬶細鍗冧竾鍒妸ModelAndView澹版槑鎴愭垚鍛樺彉閲忥紒锛堣杩囨湁钀屾柊杩欎箞骞诧紝缁撴灉鏁版嵁鍏ㄤ贡濂楋級

鏈€鍚庣殑纰庣蹇?/h3>

铏界劧鐜板湪娴佽鍓嶅悗绔垎绂伙紝浣哅odelAndView鍦ㄤ紶缁熼」鐩噷杩樻槸鎵涙妸瀛愮骇鍒殑瀛樺湪銆傝鍙ユ帍蹇冪獫鐨勮瘽锛岀敪绠℃柊鎶€鏈€庝箞鍙橈紝鈥?strong>鈥嬫帉鎻″簳灞傚師鐞嗏€?/strong>鈥嬫墠鏄‖閬撶悊銆備笅娆$湅鍒伴潰璇曢闂?Model銆丮odelMap銆丮odelAndView鏈変粈涔堝尯鍒?锛屼綘鍑嗚兘鎬煎緱闈㈣瘯瀹樼洿鐐瑰ご锛?/p>

锛堝畬锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载