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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

0回答

1882閲覧

SpringFWを使用した入力チェック後の画面遷移失敗

Tazusa

総合スコア41

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

1クリップ

投稿2018/06/19 15:54

前提・実現したいこと

ユーザー名・パスワードが未入力の状態でloginボタンを押した結果、
同じ画面に遷移させ、それぞれ入力欄の下に"ユーザー名を入力"、"passを入力"が表示される状態にしたいです。
しかし、どちらかまたは両方が空欄の状態でloginボタンを押すと、404NotFoundが表示されてしまいます。

###エラーメッセージ
HTTPステータス 404 - /helloWorld/WEB-INF/view/index.jsp
type ステータスレポート
メッセージ /helloWorld/WEB-INF/view/index.jsp
説明 The requested resource is not available.
Apache Tomcat/8.0.36

該当のソースコード

login画面

<!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%> <html> <head> <meta charset="utf-8"> <title>ログイン</title> </head> <body> <f:form modelAttribute="loginForm" action="login" method="post"> <div> ユーザー名:<input type="text" id="loginName" name="loginName"/> <f:errors path="loginName" element="div"/> </div> <div> パスワード:<input type="password" id="loginPassword" name="loginPassword"/> <f:errors path="loginPassword" element="div"/> </div> <div> <input type="submit" value="login"/> </div> </f:form> </body> </html>

Form

package helloWorldForm; import org.hibernate.validator.constraints.NotEmpty; import helloWorldValidation.GroupOrder1; public class LoginForm { @NotEmpty(groups={GroupOrder1.class}, message="ユーザー名を入力") private String loginName; @NotEmpty(groups={GroupOrder1.class}, message="passを入力") private String loginPassword; public String getLoginName() { return loginName; } public String getLoginPassword() { return loginPassword; } public void setLoginName(String loginName) { this.loginName = loginName; } public void setLoginPassword(String loginPassword) { this.loginPassword = loginPassword; } }

Controller

package helloWorldController; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import helloWorldForm.LoginForm; import helloWorldValidation.GroupOrder; @Controller public class LoginController { @RequestMapping(value = "/", method = RequestMethod.POST) public String index(Model model) { return "index"; } @RequestMapping(value="/login", method = RequestMethod.POST) public String login(Model model, @Validated(GroupOrder.class) @ModelAttribute("loginForm") LoginForm loginForm, BindingResult result) { if(result.hasErrors()) { return "index"; } model.addAttribute("loginName", loginForm.getLoginName()); return "top"; } }

###試したこと
pom.xmlに以下の記述を追加

<!-- validation-api(入力値検証で使用) --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> <!-- Hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.4.Final</version> </dependency>

補足情報(FW/ツールのバージョンなど)

Java8
Spring3.2.3

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

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

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

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

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

m.ts10806

2018/06/20 00:53

actionに指定されている先がないからに他なりません。loginForm→LoginFormとかじゃないですか?
Tazusa

2018/06/20 04:08

actionの指定先はloginで、Controllerを確認しても、value="/login"という記述をしているので、問題ないかと思っているのですが…
euledge

2018/06/20 10:23

LoginFormのバリデーションのアノテーションが無ければ、コントローラまで届きますか?
Tazusa

2018/06/20 15:49

はい。IDもパスワードも未入力の状態でバリデーションのアノテーションを消すと、topへ画面遷移して「ようこそさん」と表示されます。同じページに再び遷移させることができません。
euledge

2018/06/20 23:34

@ModelAttribute と @Validatedの順序変えてみるとどうでしょうか?
Tazusa

2018/06/21 14:08

試してみましたが、状況は変わりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問