spring MVCの構造ModelAndViewオブジェクト

4011 ワード

spring MVCの構造ModelAndViewオブジェクト
--------
 
ModelAndViewオブジェクトを作成
 
コントローラが要求を処理し終わると、通常は、ビュー名またはビューオブジェクトおよびモデル属性を含むModelAndViewオブジェクトをDispactch Servletに返す.そのため、コントローラでModelAndViewオブジェクトを作成する必要があります.ModelAndViewはいくつかのリロードのコンストラクタと便利な方法を提供しています.自分の好みによってModelAndViewオブジェクトを作成することができます.これらのコンストラクタおよび方法は、ビュー名とビューオブジェクトを同様にサポートする.
 
 
モデルの属性が一つしかない場合、この属性をコンストラクタに指定してModelAndViewオブジェクトを作成できます.
package com.apress.springrecipes.court.web;
...
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class WelcomeController extends AbstractController{
	public ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response)throws Exception{
		Date today = new Date();
		return new ModelAndView("welcome","today",today);
	}
}
 
 
複数の属性が戻る場合は、まず一つのMapに伝達してからModelAndViewオブジェクトを作成します.
package com.apress.springrecipes.court.web;
...
import org.springframework.web.servlet.ModelAndView;
import org. springframework.web.servlet.mvc.AbstractController;
public class ReservationQueryController extends AbstractController{
	...
	public ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response)throws Exception{
		...
		Map<String,Object> model = new HashMap<String,Object>();
		if(courtName != null){
			model.put("courtName",courtName);
			model.put("reservations",reservationService.query(courtName));
		}
		return new ModelAndView("reservationQuery",model);
	}
}
 
 
SpringもModelMapを提供しています.これはjava.util.Mapで実現されています.モデル属性の特定のタイプに従って、モデル属性の名前を自動的に生成することができます. 
package com.apress.springrecipes.court.web;
...
import org.springframework.ui.ModelMap;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class ReservationQueryController extends AbstractController{
	...
	public ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response)throws Exception{
		...
		ModelMap model = new ModelMap();
		if(courtName != null){
			model.addAttribute("courtName",courtName);
			model.addAttribute("reservations",reservationService.query(courtName));
		}
		return new ModelAndView("reservationQuery",model);
	}
}
この2つのモデルの属性のタイプはStringとList<Restervation>であるため、ModelMapはそれらのデフォルトの名前であるstringとreervationListを生成する.これらの名前が嫌なら、明示的に指定できます.
 
 
ModelAndViewオブジェクトを作成した後も、依然としてaddobject()法を利用してモデルの属性を追加することができます.この方法はModelAndViewオブジェクトに戻ります.
それ自体は、一つの文でModelAndViewオブジェクトを作成することができます.addObject()メソッドの属性名を省略することもできます.この方法はModeMapと同じ属性名を生成する.
package com.apress.springrecipes.court.web;
...
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class ReservationQueryController extends AbstractController{
	...
	public ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response)throws Exception{
		....
		List<Reservation> reservations = null;
		if(courtName != null){
			reservations = reservationService.query(courtName);
		}
		return new ModelAndView("reservationQuery","courtName",courtName)
			.addObject("reservations",reservations);
	}
}
実際には、戻るモデルとビューはオプションです.場合によっては、ビューだけを返します.モデルには属性がありません.あるいはモデルだけを返して、Spring MVCに要求URLによってビューを決定させます.場合によっては、コントローラにHttpServletResonseオブジェクトを直接処理させると、nullに戻ることもできます.例えば、バイナリファイルをユーザに返すときもあります.