8月28日

年齢計算アプリを作成する

入力フォームで生年月日をSelectで入力する。

生年月日を入力してください。
「    」年「  」月「  」日
[計算]

計算ボタンを押すと、生年月日と曜日、満年齢を表示する。

生年月日はxxxx年xx月xx日x曜日です。
満xx歳です。

プロジェクト名: Age
テンプレート: Simple Spring Web Maven

form.jsp

<!DOCTYPE html>

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>
    <head>
        <meta charset="utf-8">
        <title>年齢計算</title>
    </head>
    <body>
        <h1>年齢計算</h1>
        <div style="font-size: 24pt;">${result}</div>
        <h2>${message}</h2>
        <form:form modelAttribute="formModel">
        <form:select path="year" name="year"
            items="${years}" multiple="false" />年
        <form:select path="month" name="month"
            items="${months}" multiple="false" />月
        <form:select path="day" name="day"
            items="${days}" multiple="false" />日
        <br />
        <input type="submit" value="計算" />
        </form:form>
    </body>
</html>

FormModelを作成する。
ここでは生年月日なので、Year・Month・Dayがあればよい。

FormModel.java

package jp.abc;

public class FormModel {
	private String year;
	private String month;
	private String day;
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
	public String getMonth() {
		return month;
	}
	public void setMonth(String month) {
		this.month = month;
	}
	public String getDay() {
		return day;
	}
	public void setDay(String day) {
		this.day = day;
	}
}

コントローラでSelectの要素をListにして渡す。

AgeController.java

	@RequestMapping(value = "/form", method = RequestMethod.GET)
	public String helo(Model model) {
	    model.addAttribute("title", "ModelAndView sample");
	    model.addAttribute("message", "年齢を計算します。");
	    FormModel fm = new FormModel();
	    model.addAttribute("formModel", fm);
	    model.addAttribute("years", getYears());
	    model.addAttribute("months", getMonths());
	    model.addAttribute("days", getDays());
	    return "form";
	}

getYears()・getMonths()・getDays() の各メソッドでは、Listを返す。

getYears()の例

	private List<String> getYears() {
		List<String> list = new ArrayList<String>();
		for (int i = 1900; i <= 2015; i++) {
			list.add(String.valueOf(i));
		}
		return list;
	}

コントローラにPOSTメソッドをリクエストされたときの処理を実装する。

AgeController.java

	@RequestMapping(value = "/form", method = RequestMethod.POST)
	public String rating(@ModelAttribute FormModel formModel, Model model) {
	        model.addAttribute("message", "年齢を計算します。");
	        int y = Integer.parseInt(formModel.getYear());
	        int m = Integer.parseInt(formModel.getMonth());
	        int d = Integer.parseInt(formModel.getDay());
	        String s = getBirthday(y, m, d);
	        s += "<br />";
	        s += "満" + getAge(y, m, d) + "歳です。";
	        model.addAttribute("result", s);
	        FormModel fm = new FormModel();
	        model.addAttribute("formModel", fm);
		    model.addAttribute("years", getYears());
		    model.addAttribute("months", getMonths());
		    model.addAttribute("days", getDays());
	    return "form";
	}

getBirthday() と getAge() を追加する。

	private String getBirthday(int y, int m, int d) {
		Calendar c = Calendar.getInstance();
		c.set(y, m - 1, d);
		SimpleDateFormat f = new SimpleDateFormat("yyyy年MM月dd日 E曜日");
		return f.format(c.getTime());
	}

	private int getAge(int y, int m, int d) {
		Calendar c = Calendar.getInstance();
		int ty = c.get(Calendar.YEAR);
		int tm = c.get(Calendar.MONTH) + 1;
		int td = c.get(Calendar.DATE);
		int age = ty - y;
		if (tm > m) return age - 1;
		if (tm == m && td > d) return age - 1;
		return age;
	}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です