読者です 読者をやめる 読者になる 読者になる

山崎屋の技術メモ

IT業界で働く中で、気になること、メモしておきたいことを書いていきます。

【Spring MVC】Model に登録されているオブジェクトの一覧を表示する

前回の記事で、サーバ側(Controller)で設定した値を JSP で表示するサンプルを掲載した。その際に Spring で用意されている、 Model オブジェクトに JSP で使用したいオブジェクトをセットした。

yyama1556.hateblo.jp

今回はこの Model に登録されているオブジェクトの一覧を表示する方法、および、識別名をキーにオブジェクトの存在有無を確認するサンプルをメモしておく。

オブジェクトの一覧を表示する

難しいことは何もないので、まずソース(抜粋)。

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Model model) {
		// (1) String
		model.addAttribute("att1", "ほげ");

		// (2) List
		List<String> list = new ArrayList<>();
		list.add("リスト1");
		list.add("リスト2");
		list.add("リスト3");
		model.addAttribute("att2", list);

		// (3) 独自クラス
		ClassA classA = new ClassA();
		classA.setName("山崎屋");
		classA.setAge(19);
		model.addAttribute("att3", classA);

		// (4) model に登録されているオブジェクトをすべて表示
		model.asMap().entrySet().stream().forEach(s -> System.out.println(s));

		return "home";
	}

(1)~(3) でそれぞれ String/List/独自クラス のオブジェクトを生成し、model に addAttribute している。

そして (4) で model に登録されているオブジェクトの一覧を標準出力に出力している。Stream を使用しているので、見慣れていない人は何をしているのか分かりにくいかも知れないが、ポイントは「model.asMap()」の部分。ここで、model に登録されているオブジェクトをマップにして返している。

Map のキーが識別名(att1、att2、att3)の文字列で、Map の値が登録したオブジェクトである。標準出力にはこのオブジェクトの toString() の戻り値が表示される。

このメソッドを実行した際の標準出力はこちら。

att1=ほげ
att2=[リスト1, リスト2, リスト3]
att3=org.yyama.web.HomeController$ClassA@20a4e442

ちなみに、Stream を使用しない場合、 (4)は次のようになる。

		// (4) model に登録されているオブジェクトをすべて表示
		for (Map.Entry<String, Object> e : model.asMap().entrySet()) {
			System.out.println(e);
		}

model への登録有無を確認する。

model オブジェクトには containsAttribute というインスタンスメソッドが用意されており、第一引数に識別名を文字列で渡してあげることにより、その識別名が登録されているか否か、bool 値を返してくれる。

サンプルソースはこちら。

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Model model) {
		// (1) String
		model.addAttribute("att1", "ほげ");

		// (2) List
		List<String> list = new ArrayList<>();
		list.add("リスト1");
		list.add("リスト2");
		list.add("リスト3");
		model.addAttribute("att2", list);

		// (3) 独自クラス
		ClassA classA = new ClassA();
		classA.setName("山崎屋");
		classA.setAge(19);
		model.addAttribute("att3", classA);

		// (5) model への登録有無を確認
		System.out.println(model.containsAttribute("att1")); // true
		System.out.println(model.containsAttribute("att2")); // true
		System.out.println(model.containsAttribute("att3")); // true
		System.out.println(model.containsAttribute("att4")); // false

		return "home";
	}

コメントで記載している値が標準出力に出力される。

↓↓↓ Spring Framework 関連の記事をまとめました。
yyama1556.hateblo.jp

今日はここまで。

わかりやすいJava EE ウェブシステム入門

わかりやすいJava EE ウェブシステム入門