SpringMVCで数値のValidationチェックする方法

SpringMVCで数値のValidationチェックする方法

SpringMVCで数値のValidationチェックをします。Validation用ライブラリなどの設定は「SpringMVCでValidationチェックする」を参照してください。

マイナス入力は不可にするようにしてみたいと思います。

フォームにpriceを追加します。

package jp.co.confrage;

import java.io.Serializable;
import javax.validation.constraints.Min;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import org.hibernate.validator.constraints.NotEmpty;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class HomeForm implements Serializable {
private static final long serialVersionUID = 1L;
@NotEmpty
private String keyword;
@Min(0)
private String price;
}

@Min(0)とすることで最低でも0以上でないとエラーになるようにアノテーションを指定します。

次に送信ボタン押下時のコントローラは以下です。

package jp.co.confrage;

import javax.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("sample")
public class PostController {

private static final Logger logger = LoggerFactory.getLogger(PostController.class);

@RequestMapping(value="post", method=RequestMethod.POST)
public String post(@Valid HomeForm form,BindingResult result,Model model) {
logger.info("Post : " + form.getKeyword());

// エラーの場合
if(result.hasErrors()) {
return "home";
}
model.addAttribute("postData", form.getKeyword());
return "post";
}
}

最後にJSPです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>

<P> Welcome Sample Page. </P>
<spring:url value="/sample/post" var="act" />
<form:form action="${act}" method="post" modelAttribute="homeForm">
<form:label path="keyword">入力›</form:label>
<form:input path="keyword" />
<form:errors path="keyword" cssStyle="color:red" element="div"/>
<br>
<form:label path="price">金額</form:label>
<form:input path="price" />
<form:errors path="price" cssStyle="color:red" element="div"/>
<input type="submit" value="送信" />
</form:form>
</body>
</html>

試しに金額に-1を入力して送信すると以下のようにエラーが表示されます。

SpringMVCで数値のValidationチェックする

ちなみに2つともエラーとすると以下のようになります。

SpringMVCで数値のValidationチェックする

2つのエラーをまとめたい場合はform:errorsを一つにし、JSPのpath属性をワイルドカード(*)にします。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>

<P> Welcome Sample Page. </P>
<spring:url value="/sample/post" var="act" />
<form:form action="${act}" method="post" modelAttribute="homeForm">
<form:label path="keyword">入力›</form:label>
<form:input path="keyword" />
<br>
<form:label path="price">金額</form:label>
<form:input path="price" />
<form:errors path="*" cssStyle="color:red" element="div"/>
<input type="submit" value="送信" />
</form:form>
</body>
</html>

SpringMVCで数値のValidationチェックする

コメント

タイトルとURLをコピーしました