前提・実現したいこと
お世話になっております。
SpringBootで入力チェックを実装したいのですが、
実装して、画面を表示した際にエラーが発生してしまいます。
内容としては、メールアドレスのフォーマットは正しくない場合エラーメッセージを画面に出したいです。
以下2つのエラーが表示されます。
該当ソースコードは必要箇所だけ抜粋しています。
発生している問題・エラーメッセージ
Exception evaluating SpringEL expression: "#fields.hasErrors('adress')" (template: "user-add" - line 26, col 6)
発生している問題・エラーメッセージ
Neither BindingResult nor plain target object for bean name 'userAdd' available as request attribute
該当のソースコード(コントローラー)
java
1package com.kproject01.controller; 2 3import java.security.Principal; 4 5import javax.validation.Valid; 6 7import org.slf4j.Logger; 8import org.slf4j.LoggerFactory; 9import org.springframework.beans.factory.annotation.Autowired; 10import org.springframework.security.crypto.password.PasswordEncoder; 11import org.springframework.stereotype.Controller; 12import org.springframework.validation.BindingResult; 13import org.springframework.validation.FieldError; 14import org.springframework.validation.ObjectError; 15import org.springframework.web.bind.annotation.GetMapping; 16import org.springframework.web.bind.annotation.ModelAttribute; 17import org.springframework.web.bind.annotation.RequestMapping; 18import org.springframework.web.bind.annotation.RequestMethod; 19import org.springframework.web.servlet.ModelAndView; 20 21import com.kproject01.entity.UserAdd; 22import com.kproject01.repository.UserRepository; 23import com.kproject01.service.UserAddService; 24 25 26 /** 27 * ユーザ登録処理 28 * 29 * @param userAdd 30 * @param mav 31 * @return 32 */ 33 @RequestMapping(value = "user_add_insert", method = RequestMethod.POST) 34 public ModelAndView userAddInsert(@Valid @ModelAttribute UserAdd userAdd, BindingResult bindingResult, ModelAndView mav, Principal principal) { 35 36 //入力チェック 37 if (bindingResult.hasErrors()) { 38 for(FieldError err: bindingResult.getFieldErrors()) { 39 log.debug("error code = [" + err.getCode() + "]"); 40 } 41 } 42 // メールアドレスが登録済みか判定 43 if (repository.countByUsername(userAdd.getAdress()) > 0) { 44 mav.addObject("obj", "既に登録済みのメールアドレスです。"); 45 mav.setViewName("user-add"); 46 return mav; 47 } 48 // パスワードをハッシュ化 49 userAdd.setPassword(passwdEncoder.encode(userAdd.getPasswordLiv())); 50 // 管理者権限の有無を判定 51 if (userAdd.getRegRole().equals("ROLE_USER")) { 52 userAdd.setRegRolePre("無し"); 53 } else { 54 userAdd.setRegRolePre("有り"); 55 } 56 // 登録処理 57 UserAdd userAddList = userAddService.userAdd(userAdd, principal); 58 mav.addObject("userAddList", userAddList); 59 mav.addObject("user", userAdd.getFirstName() + "さん登録しました。"); 60 mav.setViewName("user-add-done"); 61 return mav; 62 } 63} 64
該当のソースコード(form)
java
1package com.kproject01.entity; 2 3import java.util.Date; 4 5import javax.validation.constraints.Pattern; 6 7/** 8 * ユーザ登録用 9 * @author takahiro 10 * 11 */ 12public class UserAdd { 13 14 //メールアドレス 15 @Pattern(regexp = "^([\w])+([\w\._-])*\@([\w])+([\w\._-])*\.([a-zA-Z])+$") 16 private String username; 17 18 public String getUsername() { 19 return username; 20 } 21 public void setUsername(String username) { 22 this.username = username; 23 } 24 25} 26
該当のソースコード
html
1<!DOCTYPE html> 2<html lang="ja" xmlns:th="http://www.thymeleaf.org" 3 xmlns:sec="http://www.thymeleaf.org/extras/spring-security4"> 4<head> 5<meta charset="UTF-8"> 6</head> 7<body> 8 <div th:replace="common/globalnavi::globalnavi"></div> 9<h1>ユーザ登録ページ</h1> 10<form method="post" th:action="@{/user_add_insert}" th:object="${userAdd}"> 11 メールアドレス: 12 <input type="text" name="username" 13 required="required" autofocus="autofocus"><br> 14<p><input type="submit" value="登録"></p> 15</form> 16</body> 17</html>
試したこと
htmlのform部分にth:objectを追加したりしたのですが、うまく動かず、、、、
ご教授いただければと思います。
補足情報(FW/ツールのバージョンなど)
java8
SpringBoot 2.0
thymeleaf
回答2件
あなたの回答
tips
プレビュー