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

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

ただいまの
回答率

90.85%

  • JSP

    868questions

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

  • Spring

    617questions

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

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

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 123

Tazusa

score 21

 前提・実現したいこと

ユーザー名・パスワードが未入力の状態で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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • Tazusa

    2018/06/21 00:49

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

    キャンセル

  • euledge

    2018/06/21 08:34

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

    キャンセル

  • Tazusa

    2018/06/21 23:08

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

    キャンセル

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

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

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JSP

    868questions

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

  • Spring

    617questions

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