Q&A
前提・実現したいこと
ログイン画面でID,PWがあっていたら次の画面へ
間違っていたらメッセージを出して再びログイン画面へ
という処理をしています。
上記自体はできたのですが、画面遷移をしたときにURLが思っているものになりません。
どうすればいいでしょうか?
ファイル構成
ファイルの構成です
該当のソースコード
LoginInfoBean.java
Java
1@Data 2public class LoginInfoBean { 3 4 private String id; 5 private String pw; 6 7}
MainController.java
Java
1@Controller 2public class MainController { 3 4 @GetMapping("/hello") 5 public String hello(Model model) { 6 model.addAttribute("info", new LoginInfoBean()); 7 return "hello"; 8 } 9 10 @PostMapping("/bunki") 11 public String bunki(@ModelAttribute("info") LoginInfoBean info, Model model) { 12 13 String id = info.getId(); 14 String pw = info.getPw(); 15 16 if(id.equals("1") && pw.equals("1")) { 17 return "ok"; 18 } 19 20 model.addAttribute("message", "認証に失敗しました"); 21 return "hello"; 22 } 23}
hello.html
HTML
1<!doctype html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<title>index</title> 5<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6<meta charset="UTF-8" /> 7<link rel="stylesheet" 8 href="webjars/bootstrap/4.4.1/css/bootstrap.min.css" /> 9<script src="webjars/bootstrap/4.4.1/js/bootstrap.min.js"></script> 10</head> 11<body> 12 <div class="container"> 13 <p class="text-center text-danger" th:text="${message}" /> 14 <form th:action="@{/bunki}" th:object="${info}" method="post"> 15 16 <div class="d-block mx-auto col-md-4"> 17 <div class="form-group"> 18 <input type="text" class="form-control" name="id" 19 placeholder="id"> 20 </div> 21 <div class="form-group"> 22 <input type="text" class="form-control" name="pw" 23 placeholder="pw"> 24 </div> 25 <div class="form-group"> 26 <input type="submit" class="form-control btn-primary" value="決定"> 27 </div> 28 </div> 29 </form> 30 </div> 31</body> 32</html>
ok.htmlはただOKと表示するだけです。
発生している問題・エラーメッセージ
自分としては失敗した場合はURLが
http://localhost:8080/hello
成功した場合は
http://localhost:8080/ok
となるかと思ったのですが、どちらの場合も
http://localhost:8080/bunki
となってしまいました。
試したこと
調べたところ、redirectとすればURLは変わらず、forwardとつけるとURLが変わる
のようなことが書いてあったので
MainController.javaを
Java
1@Controller 2public class MainController { 3 4 @GetMapping("/hello") 5 public String hello(Model model) { 6 model.addAttribute("info", new LoginInfoBean()); 7 return "hello"; 8 } 9 10 @PostMapping("/bunki") 11 public String bunki(@ModelAttribute("info") LoginInfoBean info, Model model) { 12 13 String id = info.getId(); 14 String pw = info.getPw(); 15 16 if(id.equals("1") && pw.equals("1")) { 17 return "forward:ok"; 18 } 19 20 model.addAttribute("message", "認証に失敗しました"); 21 return "redirect:hello"; 22 } 23}
として見たのですが
forwardのほうはWhitelabel Error Pageが表示されてしまい
redirectのほうはURLは/helloのまま変わらないですが「認証に失敗しました」というメッセージが出なくなってしまいました。
どうすればよいでしょうか?
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2020/02/06 02:21
2020/02/06 06:59
2020/02/07 02:46 編集
2020/02/07 07:10
2020/02/10 00:39