前提・実現したいこと
ユーザー名・パスワードが未入力の状態で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
あなたの回答
tips
プレビュー