Spring Frameworkを使ってみる（４）

# 入力値チェックの実装
## pomを編集
pom.xmlへ追記します。

```xml:pom.xml
		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.1.0.Final</version>
		</dependency>
		
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>5.2.4.Final</version>
		</dependency>
```

## チェック順序用インターフェースの作成
チェックする順序のインターフェースを作成します。
第一チェックを「CheckOrder1.java」
第二チェックを「CheckOrder2.java」
まとめたチェックを「CheckOrder.java」として、「src/main/java/com/example/HelloWorld/Validation」の中に作成します。

```java:CheckOrder1.java
package com.example.HelloWorld.Validation;

    public interface CheckOrder1 {
 
}
```

```java:CheckOrder2.java
package com.example.HelloWorld.Validation;
 
    public interface CheckOrder2 {
 
}
```

LoginFormを編集

```java:LoginForm.java
package com.example.HelloWorld;
 
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
 
import org.hibernate.validator.constraints.NotEmpty;
 
import com.example.HelloWorld.Validation.CheckOrder1;
import com.example.HelloWorld.Validation.CheckOrder2;
 
public class LoginForm {
    @NotEmpty(groups={CheckOrder1.class},message="ユーザ名を入力してください。")
    private String loginName;
 
    @NotEmpty(groups={CheckOrder1.class},message="パスワードを入力してください。")
    @Size(min=8,max=16,groups={CheckOrder2.class},message="パスワードは{min}文字以上{max}文字以下です。")
    @Pattern(regexp="[a-zA-Z0-9]*",groups={CheckOrder2.class},message="パスワードは英数である必要があります。")
    private String loginPassword;
 
public String getLoginName() {
    return loginName;
}
 
public void setLoginName(String loginName) {
    this.loginName = loginName;
}
 
public String getLoginPassword() {
    return loginPassword;
}
 
public void setLoginPassword(String loginPassword) {
    this.loginPassword = loginPassword;
    }
}
```

## LoginControllerを編集

```java:LoginController.java
package com.example.HelloWorld;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.example.HelloWorld.Validation.CheckOrder;
 
@Controller
public class LoginController {
	@RequestMapping(value = "/login", method = RequestMethod.POST)
		public String login(Model model, @Validated(CheckOrder.class) @ModelAttribute("loginForm") LoginForm loginForm, BindingResult result) {
			if(result.hasErrors()) {
				return "index";
			}
	 
			model.addAttribute("loginName", loginForm.getLoginName());
			return "top";}
}
```
# index.jspを編集

```html:index.jsp
<!DOCTYPE html>
 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%>
 
<html>
<head>
<meta charset="utf-8">
<title>ログイン</title>
</head>
<body>
<f:form modelAttribute="loginForm" action="login" method="post">
<div>
ユーザ名：<input type="text" id="loginName" name="loginName">
<f:errors path="loginName" element="div" cssStyle="color:red" />
</div>
<div>
パスワード：<input type="text" id="loginPassword" name="loginPassword">
<f:errors path="loginPassword" element="div" cssStyle="color:red" />
</div>
<div>
<input type="submit" value="ログイン">
</div>
</f:form>
 
</body>
</html>
```
上記設定が完了したら、サーバーを立ち上げます。

試しで入力が間違えると、下記の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399736/3f370eab-a891-d102-e759-a38149524a71.png)

# 次回
[データベースへのアクセス](https://qiita.com/Hakata2002/items/01d707652ab27c505e3d)について説明します。