質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

4352閲覧

SpringBootで入力チェックの実装時のエラー

takahiro00

総合スコア84

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

2クリップ

投稿2018/11/24 14:28

編集2018/12/17 12:10

前提・実現したいこと

お世話になっております。
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koronatail

2018/12/14 13:26

張っていただいたhtmlがuser-add-doneというビューなのでしょうか。th:object="${userAdd}"~と書かれていますがコントローラー「userAddInsert」メソッドの中でuserAddという名前でaddObjectされているものがないように見えますが何か省略されていますか?最初のエラーメッセージの#fields.hasErrors('adress')もhtml中のエラーだと思われますがhtml中に#fields.hasErrors('adress')という記載がないので???といった印象です。張っていただいているソース以外の箇所で何かが起きているのかもしれません。common/globalnaviの内容なども張っていただくといいかもしれません。
guest

回答2

0

ベストアンサー

controller部分の引数の順番が違うように思えます。
BindingResultはModelAttributeの直後に書く必要があります。

以下を参照
https://dev.classmethod.jp/server-side/java/invalid-ordering-of-bindingresult-and-modelattribute/

投稿2018/12/05 12:47

masue101

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takahiro00

2018/12/17 12:13

ありがとうございます。 なぜかエラーメッセージは出せませんが、 バグは一旦なくなりました!
guest

0

<form>の中で送信しているパラメータがパスワード(password)しかありませんので、メールアドレス用のフィールド (adress) を追加しましょう。

BindingResultは、@Valid を指定した引数の次に指定してください。例えば次のようになります。

public ModelAndView confirm(@Valid @ModelAttribute UserForm userForm, BindingResult bindingResult ,ModelAndView mnv) { .... }

投稿2018/11/25 14:28

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takahiro00

2018/11/26 13:17

ご回答ありがとうございます。 上記試してみましたが、状況変わらずでした・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問