実現したいこと
htmlのテキストボックスにて、入力しないままアップロードボタンを押下した場合にbegin.htmlにリダイレクトさせたいです。
発生している問題・分からないこと
テキストボックスに値を入力しないまま、アップロードボタンを押下した場合、begin.htmlにリダイレクトしないです。
エラーメッセージ
error
1問題発生欄に記載しました。
該当のソースコード
java
1package com.example.validatePractice.controller; 2 3import com.example.validatePractice.form.InputForm; 4import org.springframework.stereotype.Controller; 5import org.springframework.ui.Model; 6import org.springframework.validation.BindingResult; 7import org.springframework.validation.annotation.Validated; 8import org.springframework.web.bind.annotation.GetMapping; 9import org.springframework.web.bind.annotation.ModelAttribute; 10import org.springframework.web.bind.annotation.PostMapping; 11 12import javax.validation.Valid; 13 14@Controller 15public class WebController { 16 17 @GetMapping(value = "/") 18 String startDisplay(InputForm inputForm) { 19 return "begin"; 20 } 21 22 @PostMapping(value = "/upload") 23 String upload(@Validated @ModelAttribute InputForm inputForm, BindingResult result, Model model) { 24 if (result.hasErrors()) { 25 return "redirect:/begin"; 26 } 27 return "validate"; 28 } 29} 30
html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>begin</title> 6</head> 7<body> 8<form method="post" th:action="@{/upload}" th:object="${inputForm}"> 9 <!-- エラーメッセージはformタグ内ではないと使えない --> 10<!-- <ul th:if="${#fields.hasErrors('*')}">--> 11<!-- <li th:each="error:${#fields.errors('*')}" th:text="${error}"></li>--> 12<!-- </ul>--> 13 <input type="text" th:field="*{name}"><br /> 14<!-- <input type="file" th:field="*{uploadFile}" /><br />--> 15 <button type="submit">アップロード</button> 16</form> 17</body> 18</html>
java
1package com.example.validatePractice.form; 2 3 4import org.hibernate.validator.constraints.Length; 5 6import javax.validation.constraints.NotBlank; 7import javax.validation.constraints.NotEmpty; 8import javax.validation.constraints.NotNull; 9 10public class InputForm { 11// @FileRequired 12// private MultipartFile uploadFile; 13 14 @NotNull 15 @NotBlank 16 @NotEmpty 17 private String name; 18 19 public String getName() { 20 return this.name; 21 } 22 23 public void setName(String name) { 24 this.name = name; 25 } 26 27 @Override 28 public String toString() { 29 return "InputForm{" + 30 "name='" + name + '\'' + 31 '}'; 32 } 33} 34
pom.xml
1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>3.3.1</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>validatePractice</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>validatePractice</name> 15 <description>Demo project for Spring Boot</description> 16 <url/> 17 <licenses> 18 <license/> 19 </licenses> 20 <developers> 21 <developer/> 22 </developers> 23 <scm> 24 <connection/> 25 <developerConnection/> 26 <tag/> 27 <url/> 28 </scm> 29 <properties> 30 <java.version>17</java.version> 31 </properties> 32 <dependencies> 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-starter-thymeleaf</artifactId> 36 </dependency> 37 <dependency> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-starter-web</artifactId> 40 </dependency> 41 42 <dependency> 43 <groupId>org.springframework.boot</groupId> 44 <artifactId>spring-boot-starter-test</artifactId> 45 <scope>test</scope> 46 </dependency> 47 48 <dependency> 49 <groupId>jakarta.validation</groupId> 50 <artifactId>jakarta.validation-api</artifactId> 51 <version>2.0.2</version> 52 </dependency> 53 54 <dependency> 55 <groupId>org.springframework.boot</groupId> 56 <artifactId>spring-boot-starter-validation</artifactId> 57 </dependency> 58 </dependencies> 59 60 <build> 61 <plugins> 62 <plugin> 63 <groupId>org.springframework.boot</groupId> 64 <artifactId>spring-boot-maven-plugin</artifactId> 65 </plugin> 66 </plugins> 67 </build> 68 69</project> 70
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
・デバッグにてアップロードボタンを押下後に確認しましたがbindingResultに検証結果であるerrorの件数が0件を確認しました。inputFormには値がバインドしていることは確認済みです。
・ネットには引数の順番が正しくない場合があるので確認しましたが、formの後にbindingResultをしているので問題ないと思います。
・validationの依存関係も問題ないと思います。
補足
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー