6月21日

各入力フィールドにえらーを表示

エラーメッセージをそれぞれの入力フィールドの近くに表示するように、HTMLテンプレートを変更する。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>top page</title>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<style type="text/css">
h1 {
  font-size: 18pt;
  font-weight: bold;
  color: gray;
}
body {
  font-size: 13pt;
  color: gray;
  margin: 5px 25px;
}
pre {
  border: solid 3px #ddd;
  padding: 10px;
}
tr {
  margin: 5px;
}
th {
  padding: 5px;
  color: white;
  background: darkgray;
}
td {
  padding: 5px;
  color: black;
  background: #f0f0f0;
}
.err {
  color: red;
}
</style>
</head>
<body>

<h1>MyData page</h1>
<p th:text="${msg}"></p>
<form method="post" action="/mydata" th:object="${formModel}">
  <table>
    <tr>
      <td><label for="name">名前</label></td>
      <td>
        <input type="text" name="name" th:value="*{name}"
      			th:errorclass="err" />
      	<div th:if="${#fields.hasErrors('name')}" th:errors="*{name}"
      		th:errorclass="err"></div>
      </td>
    </tr>
    <tr>
      <td><label for="age">年齢</label></td>
      <td>
        <input type="text" name="age" th:value="*{age}"
      			th:errorclass="err"/>
      	<div th:if="${#fields.hasErrors('age')}" th:errors="*{age}"
      		th:errorclass="err"></div>
      </td>
    </tr>
    <tr>
      <td><label for="mail">メール</label></td>
      <td>
        <input type="text" name="mail" th:value="*{mail}"
        	th:errorclass="err"/>
        <div th:if="${#fields.hasErrors('mail')}" th:errors="*{mail}"
        	th:errorclass="err"></div>
      </td>
    </tr>
    <tr>
      <td><label for="memo">メモ</label></td>
      <td><textarea name="memo" th:value="*{memo}" rows="5" cols="20"></textarea></td>
    </tr>
    <tr>
      <td></td>
      <td><input type="submit" /></td>
    </tr>
  </table>
</form>

<hr />
<table>
  <tr>
    <th>ID</th><th>名前</th><th>編集</th><th>削除</th>
  </tr>
  <tr th:each="obj : ${datalist}">
    <td th:text="${obj.id}"></td>
    <td th:text="${obj.name}"></td>
    <td><a th:href="@{'/edit/' + ${obj.id}}">編集</a></td>
    <td><a th:href="@{'/delete/' + ${obj.id}}">削除</a></td>
  </tr>
</table>


<pre th:text="${data}"></pre>


</body>
</html>

エラーメッセージを日本語で表示する

バリデーション条件を指定するアノテーションにmessageパラメータを追加することで、メッセージをカスタマイズできる。

package jp.abc;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;


@Entity
public class MyData {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column
	@NotNull
	private long id;

	@Column(length = 50, nullable = false)
	@NotEmpty(message="空白は不可")
	private String name;

	@Column(length = 200, nullable = true)
	@Email(message="メールアドレスのみ")
	private String mail;

	@Column(nullable = true)
	@Min(value=0, message="0以上")
	@Max(value=200, message="200以下")
	private Integer age;

	@Column(nullable = true)
	private String memo;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getMemo() {
		return memo;
	}

	public void setMemo(String memo) {
		this.memo = memo;
	}

}

プロパティーファイルを用意してメッセージをまとめて扱う

バリデーション用アノテーションに message 引数を追加してメッセージをカスタマイズする方法とは別に、プロパティーファイルを使う方法がある。

resources フォルダにValidationMessages.properties ファイルを作成する。
作成したファイルを右クリックして[次で開く]-[Limyプロパティーエディター]を選択する。

プロパティーファイルの内容はバリデーション用アノテーションのクラス名に続けて「.message = 」を追加して、右辺にカスタマイズしたメッセージを記述する。
MinとMaxは、アノテーションにvalue引数で渡した値を {value} で受け取って表示できる。

javax.validation.constraints.NotEmpty.message = 空白は不可です。
javax.validation.constraints.Email.message = メールアドレスではありません。
javax.validation.constraints.Min.message = {value}より大きくしてください。
javax.validation.constraints.Max.message = {value}より小さくしてください。

HSQLDBサーバーを起動する

HSQLDBをダウンロードする。
検索して公式サイトからhsqldb-2.4.1.zip をダウンロードする。
ZIPファイルを解凍したフォルダを、C:\pleiades\ に置く。

デスクトップに起動用BATファイル hsqldb.bat を作成する。

cd C:\pleiades\hsqldb-2.4.1\hsqldb\lib
java -cp hsqldb.jar org.hsqldb.Server --database.0 db/mydata --dbname.0 mydata

Macの人は、「書類」フォルダにHSQLDBを解凍する。
書類フォルダなどにテキストファイル hsqldb.sh を作成する。

#!/bin/sh
cd ~/Documents/hsqldb/lib
java -cp hsqldb.jar org.hsqldb.Server --database.0 db/mydata --dbname.0 mydata

hsqldb.sh を作成後、ターミナルで以下のコマンドを実行する。

$ cd ~/Documents
# chmod +x ./hsqldb.sh

hsqldb.bat をダブルクリックすると、HSQLDBサーバーが起動する。
コマンドプロンプトの画面を閉じるとHSQLDBサーバーが終了するので閉じないこと。
誤って閉じないように最小化しておく。

application.properties ファイルに以下の内容を記述する。

spring.datasource.url=jdbc:hsqldb:hsql://localhost/mydata
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください