スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Spring MVC バリデーションの実装

Spring MVCでバリデーションを実装してみた。

◎動作検証にあたっての各バージョンは以下の通り
  • SpringFramework 3.2.3.RELEASE
  • Java 1.7
  • Tomcat 7.0

1.Mavenのpom.xml
SpringMVCで利用できる以下のバリデーション用ライブラリを追加する。



javax.validation
validation-api
1.1.0.Final


org.hibernate
hibernate-validator
5.1.0.Final


validation-apiが基本であるが、hibernate-validatorにはvalidation-apiにないチェックが追加されている。
例えば、validation-apiにはNotNullチェックができるが、NotEmptyチェック(nullまたは空文字でないこと)がなく、hibernate-validator側で用意されている。そのため、両方pom.xmlに定義しておいた方がよい。

2.画面入力値を受け取るBookFormクラスの設定
今回は、入力項目の「bookId」「bookName」「price」に対してチェックを行うこととする。


import java.io.Serializable;
import javax.validation.constraints.Min;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;

public class BookForm implements Serializable {

private static final long serialVersionUID = 1L;

@NotBlank
private String bookId;

@NotEmpty(message="書籍名を入力してください")
private String bookName;

@Min(1)
private String price;

//getter/setterは省略

実装方法は、チェックする各フィールドにアノテーションを設定するだけ。
@NotBlankと@NotEmptyはどちらもnullまたは空文字でないことをチェックするが、@NotBlankの場合、前後の半角スペースを無視してくれる。そのため、万が一半角スペースが誤入力された場合もエラーにしてくれる。
@Min(1)は1以上の数値であることをチェックする。
また、@NotEmptyはデフォルトメッセージではなく、message属性で設定したメッセージを使うよう設定している。

3.Controller側の実装


@Controller
@RequestMapping("book")
public class BookController {

@Autowired
protected BookService bookService;

@RequestMapping(method = RequestMethod.GET)
public String index(BookForm form) {
return "newBook";
}

@RequestMapping(value = "create", method = RequestMethod.POST)
public String create(@Valid BookForm book, BindingResult result, Model model) {

if (result.hasErrors()) {
return "newBook";
}
//TODO bookServiceより返却されたBookオブジェクトをmodelに追加する
return "result";
}
}

createメソッドの引数にバリデーションを行うことを示す@Validアノテーションと、バリデーションのエラー情報を格納するBindingResultを定義している。エラーが存在する場合は、入力画面文字列を返すようにしている。

4.JSPの実装
せっかくなのでCSSにはBootstrapを使ってみた。


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<link href="<c:url value="/css/bootstrap.min.css" />" rel="stylesheet">
<link href="<c:url value="/css/bootstrap-theme.min.css" />" rel="stylesheet">
<script src="<c:url value="/js/bootstrap.min.js" />"></script>

<title>newBook</title>
</head>
<body>
<div class="container-fluid">
<h1>Book</h1>
<form:form
action="${pageContext.request.contextPath}/book/create"
method="post" modelAttribute="bookForm" class="well">
<div class="form-group error">
<form:label path="bookId" class="control-label">bookId</form:label>
<form:input path="bookId" class="form-control"/>
<p class="help-block"><font color="red"><form:errors path="bookId" /></font></p>
</div>
<div class="form-group">
<form:label path="bookName" class="control-label">bookName</form:label>
<form:input path="bookName" class="form-control"/>
<p class="help-block"><font color="red"><form:errors path="bookName" /></font></p>
</div>
<div class="form-group">
<form:label path="price" class="control-label">price</form:label>
<form:input path="price" class="form-control"/>
<p class="help-block"><font color="red"><form:errors path="price" /></font></p>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary"/>
</div>
</form:form>
</div>
</body>
</html>

エラーメッセージはform:errorsタグで表示させる。

5.動作確認

バリデーション

ちゃんとエラーになった。

■過去のSpring関連記事
Spring関連記事 Index

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

bookmount8

Author:bookmount8
システムエンジニア。サーバーサイドでjavaを扱うことが多い。最近は、ミドルやフロント周りも関心あり。

最新記事
カテゴリ
検索フォーム
最新コメント
月別アーカイブ
これまでの訪問者数
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。