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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Spring Boot

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

Q&A

0回答

1655閲覧

バリデーションを設定すると、コンソールにエラーが出てログイン画面を表示できない

Nishin

総合スコア30

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Spring Boot

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

0グッド

0クリップ

投稿2021/04/30 02:46

編集2021/04/30 02:48

**「【後悔しないための入門書】Spring解体新書」**という書籍の内容に沿って、STS4で「会員登録フォーム」を製作しようとしています。
そのために、ここまでに以下画像のようにディレクトリ・ファイルを構築してきました。

ディレクトリ・各ファイルの現状

application.propertiesの設定は、画像のとおりです。
STS上のディレクトリ・ファイル1

関係する各ファイルの記述は、現在のところ次のようになっております。

Java

1// LoginController.java 2 3package com.example.demo.login.controller; 4 5import org.springframework.stereotype.Controller; 6import org.springframework.ui.Model; 7import org.springframework.web.bind.annotation.GetMapping; 8import org.springframework.web.bind.annotation.PostMapping; 9 10@Controller 11public class LoginController { 12 13 @GetMapping("/login") 14 public String getLogin(Model model) { 15 // login.htmlに画面遷移 16 return "login/login"; 17 } 18 @PostMapping("/login") 19 public String postLogin(Model model) { 20 // login.htmlに画面遷移 21 return "login/login"; 22 } 23 24}

Java

1// SignupController.java 2 3package com.example.demo.login.controller; 4 5import java.util.LinkedHashMap; 6import java.util.Map; 7import org.springframework.stereotype.Controller; 8import org.springframework.ui.Model; 9import org.springframework.validation.BindingResult; 10import org.springframework.web.bind.annotation.GetMapping; 11import org.springframework.web.bind.annotation.ModelAttribute; 12import org.springframework.web.bind.annotation.PostMapping; 13import com.example.demo.login.domain.model.SignupForm; 14import org.springframework.validation.annotation.Validated; 15 16@Controller 17public class SignupController { 18 19 private Map<String, String> radioMarriage; 20 21 private Map<String, String> initRadioMarrige() { 22 Map<String, String> radio = new LinkedHashMap<>(); 23 // 既婚、未婚をMapに格納 24 radio.put("既婚", "true"); 25 radio.put("未婚", "false"); 26 return radio; 27 } 28 29 @GetMapping("/signup") 30 public String getSignUp(@ModelAttribute @Validated SignupForm form, Model model) { 31 radioMarriage = initRadioMarrige(); 32 model.addAttribute("radioMarriage", radioMarriage); 33 34 return "login/signup"; 35 } 36 37 // ユーザー登録画面のPOST用コントローラー 38 @PostMapping("/signup") 39 public String postSignUp(@ModelAttribute @Validated SignupForm form, 40 BindingResult bindingResult,Model model) { 41 42 if ( bindingResult.hasErrors() ) { 43 return getSignUp(form, model); 44 } 45 System.out.println(form); 46 47 return "redirect:/login"; 48 } 49 50}

Java

1// SignupForm.java 2 3package com.example.demo.login.domain.model; 4 5import java.util.Date; 6import javax.validation.constraints.AssertFalse; 7import javax.validation.constraints.Email; 8import javax.validation.constraints.Max; 9import javax.validation.constraints.Min; 10import javax.validation.constraints.NotBlank; 11import javax.validation.constraints.NotNull; 12import javax.validation.constraints.Pattern; 13import org.hibernate.validator.constraints.Length; 14import org.springframework.format.annotation.DateTimeFormat; 15import lombok.Data; 16 17@Data 18public class SignupForm { 19 20 // 必須入力、メールアドレス形式 21 @NotBlank 22 @Email 23 private String userId; // ユーザーID 24 // 必須入力、長さ4から100桁まで、半角英数字のみ 25 @NotBlank 26 @Length(min = 4, max = 100) 27 @Pattern(regexp = "^[a-zA-Z0-9]+$") 28 private String password; //パスワード 29 // 必須入力 30 @NotBlank 31 private String userName; // ユーザー名 32 // 必須入力 33 @NotNull 34 @DateTimeFormat(pattern = "yyyy/MM/dd") 35 private Date birthday; // 誕生日 36 // 値が20から100まで 37 @Min(20) 38 @Max(100) 39 private int age; // 年齢 40 // falseのみ可能 41 @AssertFalse 42 private boolean marriage; // 結婚ステータス 43 44}

↓新規会員登録画面

html

1// signup.html 2 3<!DOCTYPE html> 4<html xmlns:th="http://www.thymeleaf.org"> 5<head> 6 <meta charset="UTF-8"></meta> 7 <!-- Bootstrapの設定 --> 8 <link th:href="@{/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css}" 9 rel="stylesheet"></link> 10 <script th:src="@{/webjars/jquery/1.11.1/jquery.min.js}"></script> 11 <script th:src="@{/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js}"> 12 </script> 13 <title>SignUp</title> 14</head> 15<body> 16 <div class="col-sm-5"> 17 <div class="page-header"> 18 <h1>ユーザー登録画面</h1> 19 </div> 20 <form method="post" action="/signup" th:object="${signupForm}"> 21 <table class="table table-bordered table-hover"> 22 <!-- ユーザーIDの入力エリア --> 23 <tr> 24 <th class="active col-sm-3">ユーザID</th> 25 <td> 26 <div class="form-group"> 27 <input type="text" class="form-control" th:field="${signupForm.userId}" /> 28 </div> 29 </td> 30 </tr> 31 <!-- パスワードの入力エリア --> 32 <tr> 33 <th class="active">パスワード</th> 34 <td> 35 <div class="form-group"> 36 <input type="text" class="form-control" th:field="${signupForm.password}" /> 37 </div> 38 </td> 39 </tr> 40 <!-- ユーザー名の入力エリア --> 41 <tr> 42 <th class="active">ユーザー名</th> 43 <td> 44 <div class="form-group"> 45 <input type="text" class="form-control" th:field="${signupForm.userName}" /> 46 </div> 47 </td> 48 </tr> 49 <!-- 誕生日の入力エリア --> 50 <tr> 51 <th class="active">誕生日</th> 52 <td> 53 <div class="form-group"> 54 <input type="text" class="form-control" 55 placeholder="yyyy/MM/dd" th:field="${signupForm.birthday}" /> 56 </div> 57 </td> 58 </tr> 59 <!-- 年齢の入力エリア --> 60 <tr> 61 <th class="active">年齢</th> 62 <td> 63 <div class="form-group"> 64 <input type="text" class="form-control" th:field="${signupForm.age}" /> 65 </div> 66 </td> 67 </tr> 68 <!-- 結婚ステータスの入力エリア --> 69 <tr> 70 <th class="active">結婚</th> 71 <td> 72 <div class="form-group"> 73 <!-- ラジオボタンの実装 --> 74 <div th:each="item : ${radioMarriage}"> 75 <input type="radio" name="radioMarrige" 76 th:text="${item.key}" 77 th:value="${item.value}" 78 th:field="${signupForm.marriage}"> 79 </input> 80 </div> 81 </div> 82 </td> 83 </tr> 84 </table> 85 <!-- ポイント2:エラーメッセージの一覧表示 --> 86 <ul> 87 <li th:each="error : ${#fields.detailedErrors()}"> 88 <span th:text="${error.message}">Error message</span> 89 </li> 90 </ul> 91 <!-- ユーザー登録ボタン --> 92 <button class="btn btn-primary" type="submit"> 93 ユーザー登録 94 </button> 95 </form> 96 </div> 97</body> 98</html>

↓バリデーション設定

properties

1 2// message.properties 3 4#ユーザーID 5signupForm.userId=ユーザーID 6NotBlank.signupForm.userId={0}を入力してください 7Email.signupForm.userId={0}にはメールアドレスを入力してください 8 9#パスワード 10signupForm.password=パスワード 11NotBlank.signupForm.password={0}を入力してください 12Length.signupForm.password={0}は、{2}桁以上、{1}桁以下で入力してください 13Pattern.signupForm.password={0}は半角英数字で入力してください 14 15#ユーザー名 16signupForm.userName=ユーザー名 17NotBlank.signupForm.userName={0}を入力してください 18 19#誕生日 20signupForm.birthday=誕生日 21NotNull.signupForm.birthday={0}を入力してください 22 23#年齢 24signupForm.age=年齢 25Min.signupForm.age={0}は{1}以上を入力してください 26Max.signupForm.age={0}は{1}以下を入力してください 27 28#結婚ステータス 29AssertFalse.signupForm.marriage=未婚の方のみ登録できます

困りごと

以上の状態で、プロジェクトを右クリックしてから実行を押すと、コンソールには次のエラーが出て、ローカルホスト(8080)の画面はWhitelabelErrorとなり、会員登録画面が記述したとおりに表示できない状態が続いてしまっています。

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-04-30 11:15:57.207 ERROR 13488 --- [ restartedMain] o.s.boot.SpringApplication  : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultValidator' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Bean instantiation via factory method failed; ~~~ Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]: Factory method 'defaultValidator' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/ValidationException at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.6.jar:5.3.6] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.6.jar:5.3.6] ... 25 common frames omitted Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/ValidationException at org.hibernate.validator.internal.engine.ConfigurationImpl.<init> ~~~ Caused by: java.lang.ClassNotFoundException: javax.xml.bind.ValidationException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606) ~[na:na]

試みたこと

xmlの記述に不足がある為に上記のエラーが生じているものと推量し、次のようにコードを追記しました。

xml

1// pom.xml 2 <dependency> 3 <groupId>javax.validation</groupId> 4 <artifactId>validation-api</artifactId> 5 <version>2.0.1.Final</version> 6 <!-- ↑バージョンを1.0.1から上記に変更(バージョンの問題が原因かとも考えた為) --> 7 </dependency> 8 <!-- ↓ここからを追加 --> 9 <dependency> 10 <groupId>org.hibernate</groupId> 11 <artifactId>hibernate-validator</artifactId> 12 <version>5.2.4.Final</version> 13 </dependency> 14 <dependency> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-validation</artifactId> 17 </dependency> 18 <!-- ↑ここまでを追加 --> 19

しかし、不如意なもので結果は変わらず、依然としてバリデーションの設定に関するエラーがコンソールに表示され、埒が明かない状況が続いてしまっています。

果たして、どのファイルにどのような記述を施せば、このエラーは解消されるのでしょうか。
至らぬ事が多く、お目汚し申し訳ございませんが、この点についてご存じの方がいらっしゃいましたら、どうかご回答をお願いいたします。

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

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

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

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

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

kiino

2021/05/16 17:04

使っている SpringBoot のバージョンを教えてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問