spring MVCの構造ModelAndViewオブジェクト
4011 ワード
spring MVCの構造ModelAndViewオブジェクト
--------
ModelAndViewオブジェクトを作成
コントローラが要求を処理し終わると、通常は、ビュー名またはビューオブジェクトおよびモデル属性を含むModelAndViewオブジェクトをDispactch Servletに返す.そのため、コントローラでModelAndViewオブジェクトを作成する必要があります.ModelAndViewはいくつかのリロードのコンストラクタと便利な方法を提供しています.自分の好みによってModelAndViewオブジェクトを作成することができます.これらのコンストラクタおよび方法は、ビュー名とビューオブジェクトを同様にサポートする.
モデルの属性が一つしかない場合、この属性をコンストラクタに指定してModelAndViewオブジェクトを作成できます.
複数の属性が戻る場合は、まず一つのMapに伝達してからModelAndViewオブジェクトを作成します.
SpringもModelMapを提供しています.これはjava.util.Mapで実現されています.モデル属性の特定のタイプに従って、モデル属性の名前を自動的に生成することができます.
ModelAndViewオブジェクトを作成した後も、依然としてaddobject()法を利用してモデルの属性を追加することができます.この方法はModelAndViewオブジェクトに戻ります.
それ自体は、一つの文でModelAndViewオブジェクトを作成することができます.addObject()メソッドの属性名を省略することもできます.この方法はModeMapと同じ属性名を生成する.
--------
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に戻ることもできます.例えば、バイナリファイルをユーザに返すときもあります.