プログラム
まず、フォームの値を保持するモデルを作成します。
SignUpQuestionFormModel.java
@GroupSequence({ Group1.class,SignUpQuestionFormModel.class })
public class SignUpQuestionFormModel {
public interface Group1 {
}
@NotEmpty(message = "必須入力です" , groups = Group1.class)
@Size(max = 20, message = "{max}文字以内で入力してください" )
@Pattern(regexp = "^[0-9a-zA-Z]+$", message = "正しいフォーマットで入力してください" )
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
次に、バリデーションのサービスを作ります。
上記のモデルの中のアノテーションだけでもバリデーションはできますが、少し複雑なものとかやったりアノテーションだけではできないこともあるので、作成しました(文字数とか必須ぐらいならアノテーションだけでもいいですが)
SignUpValidationService.java
@Service
public class SignUpValidationService {
public ModelAndView validation(SignUpQuestionFormModel model) {
ModelAndView mav = new ModelAndView();
String name = model.getName();
//氏名は、必須と桁数20以下
if (name != null && !(name.equals(""))) {
if (name.length() > 20) {
mav.addObject("name_msg", "氏名には20桁以内で入力してください。");
}
} else {
mav.addObject("name_msg", "氏名は必ず入力してください");
}
//何もひっかからなかったらnullを返す
if (mav.isEmpty()) {
return null;
}
//ひっかかったらビュー名指定してreturnする
mav.setViewName("SignUpForm");
return mav;
}
}
次に、上記のバリデーションサービスをコントローラーから使います。
SignUpController.java
//新規会員登録の確認画面処理
@RequestMapping(path = "/SignUpConfirmation", method = RequestMethod.POST)
public ModelAndView SignUpConfirmation(@Valid SignUpQuestionFormModel model, BindingResult errors,
HttpSession session) {
//バリデーション開始
ModelAndView mav = null;
// BeanValidationを使用しないバリデーション
mav = svs.validation(model);
if (mav != null) {//上記のメソッドでは、一つのバリデーションひっかからなかったら、nullが得られる。
System.out.println("新規登録の際、バリデーションエラーが起きたので戻る");
return mav;
}
//バリデーション通過したら、DB処理した後に行きたいところに遷移
}