m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

Spring Bootで画面へ設定した入力を他の画面へ渡す

一般的画面遷移

f:id:m_shige1979:20161123120710p:plain

入力→確認

入力画面を設定して、確認画面で内容を表示する

画面構成

/の場合のページ
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Sample Demo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<h1>Spring Sample</h1>
	<div>
    	Spring Sample Test
	</div>
	<p>Now <span th:text="${now}"></span></p>
	<br />
	<form method="post" action="formPost">
		<span>name: </span>
		<input type="text" name="name" value="" />
		<br />
		<span>age: </span>
		<input type="text" name="age" value="" />
		<br />
		<input type="submit" value="send" />
	</form>
</body>
</html>
/formPostの場合のページ
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Sample Demo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<h1>Spring Sample</h1>
	<div>
    	Post Data
	</div>
	<br />
	<form method="post" action="formPost">
		<span>name: </span>
		<span th:text="${name}"></span>
		<br />
		<span>age: </span>
		<span th:text="${age}"></span>
		<br />
	</form>
</body>
</html>

コントローラー実装

package com.example;

import java.util.Date;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {
	
	@RequestMapping(value = {"/"}, method = {RequestMethod.GET})
	public ModelAndView index() {
		
		// 生成
		ModelAndView mv = new ModelAndView();
		
		// テンプレートを指定
		mv.setViewName("index");
		
		// 日時を取得、設定
		mv.addObject("now", new Date().toString());
		
		// 返却
		return mv;
	}
	
	// POST用のパラメータを受け取る
	@RequestMapping(value = {"/formPost"}, method = {RequestMethod.POST})
	public ModelAndView postTest1(
			@RequestParam(value="name", required = true) String name,
			@RequestParam(value="age", required = true) String age) {
		
		// 生成
		ModelAndView mv = new ModelAndView();
		
		// テンプレートを指定
		mv.setViewName("test1/post");
		
		// modelに設定して画面に表示するようにする
		mv.addObject("name", name);
		mv.addObject("age", age);
		
		// 返却
		return mv;
	}
	
	// GET用のパラメータを受け取る
	@RequestMapping(value = {"/formPost"}, method = {RequestMethod.GET})
	public ModelAndView getTest1(
			@RequestParam(value="name", required = true) String name,
			@RequestParam(value="age", required = true) String age) {
		
		// 生成
		ModelAndView mv = new ModelAndView();
		
		// テンプレートを指定
		mv.setViewName("test1/post");
		
		// modelに設定して画面に表示するようにする
		mv.addObject("name", name);
		mv.addObject("age", age);
		
		// 返却
		return mv;
	}
	
}

実行

f:id:m_shige1979:20161123130602p:plain

f:id:m_shige1979:20161123130617p:plain

GETパラメータ指定でも動く

f:id:m_shige1979:20161123130854p:plain

参考

Spring Boot触ってみる その2 ーController,テンプレートエンジン(Thymeleaf)ー - endokのブログ
Spring MVC 4.0 No. 005 GETパラメータを受け取る - コンピュータクワガタ

うーん、ModelとModelAndViewの使い方はなんとなくわかったけど使い分けはわからない…
とりあえず、ModelAndViewを使っていこう…

所感

このまま場合ではパラメータが増えたときの対応がややこしくなるのでクラスを渡してできるかを調べる。
PHPでやっていたときは配列で渡していたけどJavaはクラスを使ってなんとかする感じのはずなのでそれで対応する。