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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

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

Q&A

解決済

2回答

14873閲覧

画面遷移した時に値がNULLになる

sakuraicamp

総合スコア16

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

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

0グッド

0クリップ

投稿2017/06/21 23:35

###画面遷移してかつパラメータを渡したい

Spring boot で以下の画面遷移で、ユーザ登録機能を作っています。
①登録画面→②確認画面→③完了画面

①から②へは、フォームで入力した値を渡すことができたのですが、
②から③へ、値を渡してDBへ登録したいのですができません。

###発生している問題・エラーメッセージ

②の画面で登録ボタン(③へPOST)を押下した時に、
②の画面で設定しているバリデーションが働き、すべての項目がNULLとなってしまう。

###ソースコード(コントローラとView2つ)

アカウントのコントローラ

java

1@Controller 2@RequestMapping("accounts") 3public class AccountController { 4 5 @Autowired 6 UserService userService; 7 8 @ModelAttribute 9 public AccountForm setupForm(){ 10 return new AccountForm(); 11 } 12 13 @RequestMapping(path = "create", method = RequestMethod.GET) 14 public String form(AccountForm accountForm, Model model) { 15 16 model.addAttribute("AccountForm", accountForm); 17 return "account/form"; 18 } 19 20 @RequestMapping(path = "confirm", method = RequestMethod.POST) 21 public String createConfirm(@Valid AccountForm accountForm, BindingResult result, Model model, 22 RedirectAttributes redirectAttributes){ 23 24 if (result.hasErrors()){ 25 return "account/form"; 26 } 27 model.addAttribute("AccountForm", accountForm); 28 return "account/confirm"; 29 } 30 31 @RequestMapping(path = "regist", method = RequestMethod.POST) 32 public String regist(@Valid AccountForm accountForm, BindingResult result, Model model){ 33 34 if (result.hasErrors()){ 35 return "account/confirm"; 36 } 37 38 model.addAttribute("AccountForm", accountForm); 39 userService.regist(accountForm); 40 return "account/regist"; 41 } 42 43}

①登録画面のView

html

1 2<!DOCTYPE html> 3<html xmlns="http://www.w3.org/1999/xhtml" 4 xmlns:th="http://www.thymeleaf.org"> 5 6 <head> 7 <title>登録画面</title> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 9 </head> 10 11 <body> 12 <h2>アカウント登録画面</h2> 13 <form action="#" th:action="@{/accounts/confirm}" th:object="${accountForm}" method="post"> 14 15 <p>メールアドレス: <input type="text" th:field="*{mail}" /> </p> 16 <span th:if="${#fields.hasErrors('*{mail}')}" th:errors="*{mail}" style="color: red" /> 17 18 <p>名前: <input type="text" th:field="*{name}" /></p> 19 <span th:if="${#fields.hasErrors('*{name}')}" th:errors="*{name}" style="color: red" /> 20 21 <p>パスワード : <input type="text" th:field="*{password}" /></p> 22 <p><input type="submit" value="登録" /> </p> 23 </form> 24 </body> 25</html>

②確認画面のソース(今回はパスワードは登録しないことにしています)

html

1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" 3 xmlns:th="http://www.thymeleaf.org"> 4 5 <head> 6 <title>確認画面</title> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 8 </head> 9 10 <body> 11 <h2>確認画面</h2> 12 <form action="#" th:action="@{/accounts/regist}" th:object="${accountForm}" method="post"> 13 <p>この内容で登録しますか?</p> 14 15 <p th:text="'メール:' + ${accountForm.mail} " /> 16 <span th:if="${#fields.hasErrors('*{mail}')}" th:errors="*{mail}" style="color: red" /> 17 18 <p th:text="'氏名:' + ${accountForm.name}" /> 19 <span th:if="${#fields.hasErrors('*{name}')}" th:errors="*{name}" style="color: red" /> 20 21 <p><input type="submit" value="登録する"/></p> 22 23 <a href='/'>戻る</a> 24 </form> 25 </body> 26 27</html>

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

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

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

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

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

guest

回答2

0

確認画面にhiddenとかでデータを持っていないから、
何もPOSTされていないだけってことはないですか?

投稿2017/06/21 23:53

kopio

総合スコア487

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

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

sakuraicamp

2017/06/23 01:06

コメントありがとうございます。 アドバイスいただいたとおり何もPOSTされていませんでした。。
guest

0

ベストアンサー

上記で回答されているとおり、データをPOSTしてないからだと思います。
p th:textの内容はPOSTされません。
<input type="hidden" th:field="*{mail}">のような行をform内に持っておくか、セッションに情報を持たせておくかだと思います。
セッションに情報を持たせる場合、確認画面ではバリデーションの必要がなくなります。
また、あまり関係ないですが確認画面でエラーが出たときの遷移先が確認画面なのは使いづらそうな気がしました。

投稿2017/06/22 04:14

7tsuno

総合スコア310

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

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

sakuraicamp

2017/06/23 01:07

コメントありがとうございます。 コメント内にある、hidden を利用することで解決いたしました。 また、遷移先についても助言いただいたように対処したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問