PhoneValidator.java
package com.example.demo; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class PhoneValidator implements ConstraintValidator<Phone, String>{ @Override public void initialize(Phone phone) { } @Override public boolean isValid(String input, ConstraintValidatorContext cxt) { if(input == null) { return false; } return input.matches("[0-9()-]*"); } }
### アノテーションクラス
validation classのためのアノテーションは色々用意しなければならない。
package com.example.demo; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; import javax.validation.ReportAsSingleViolation; @Documented @Constraint(validatedBy = PhoneValidator.class) @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @ReportAsSingleViolation public @interface Phone { String message() default "please input a phone number."; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default{}; }
### Phoneバリデータの使用
MyData.java
@Column(nullable = true) @Phone private String memo;
html
<tr> <td><label for="memo">メモ</label></td> <td><textarea name="memo" th:text="*{memo}" cols="20" rows="5" th:errorclass="err"></textarea> <div th:if="${#fields.hasErrors('memo')}" th:errors="*{memo}" th:errorclass="err"> </div></td> </tr>
おおお、javaだとなんか異様に感動するな