年齢計算アプリを作成する
入力フォームで生年月日を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; }