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

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

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

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1081閲覧

Thymeleafで画面入力した値を、コントローラで再設定しても画面に反映されないのはなぜか?

yokota-g

総合スコア14

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/05/17 10:32

編集2022/05/19 09:32

事象としては以下のシナリオです。

  1. ユーザー登録画面への入力値がValidationエラーになり登録画面に戻る。エラーとなる項目はage(age=200は範囲外)。
  2. 登録画面へ遷移するためのコントローラメソッドでは、Formの初期値設定を行っている(age=25)。
  3. 再び登録画面を表示するが、年齢欄には設定し直した25ではなく200が表示されている(ここが疑問点)。

項番2で再び初期値(25)を設定しているので、その後に表示する画面では初期値(25)が表示されるかと思いきや、遷移元の画面入力値(200)が保持されていて表示されました。この理由が分からず混乱しています。

キャッシュが残っている系の原因を想像しましたが解決できず、ご教授頂きたいです。
よろしくお願い致します。


※2022/05/19追記
色々と試してみた内容を追記します。要点は2点あります。

  1. エラーではない項目は、コントローラで値を再設定することで画面にも再設定後の値が表示された。
  2. デバッガを使用して、modelbindingResultに含まれるrejectedValueの値を書き換えたら、画面にも書き換え後の値が反映された。

このことから、エラーを起こした項目についてはmodel.formの値ではなくmodel.bindingResultの値を使ってHTMLをレンダリングするらしいことが分かりました。もしも、この辺りの情報が公式ドキュメントなどに書いてあるなど、関連情報をお持ちの方がいらっしゃったら、引き続き教えて頂きたいと思っています。追加情報が無さそうであれば、様子を見て自己解決にしようと思います。


以下に関連するコードを抜粋します。

  • コントローラメソッド

SignupController.java

1@GetMapping("/signup") 2public String getSignup(Model model, Locale locale, @ModelAttribute SignupForm form) { 3 : 4 form.setAge(25); 5 : 6 return "user/signup"; 7} 8 9@PostMapping("/signup") 10public String postSignup(Model model, Locale locale, 11 @ModelAttribute @Validated SignupForm form, BindingResult bindingResult) { 12 13 if (bindingResult.hasErrors()) { 14 return getSignup(model, locale, form); 15 } 16 : 17}
  • Form

SignupForm.java

1@Min(20) 2@Max(100) 3private Integer age;
  • 画面

signup.html

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

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

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

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

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

yokota-g

2022/05/22 13:51

追記した内容で解決とさせて頂きました。
guest

回答1

0

自己解決

2022/05/19追記の内容で自己解決とします。

投稿2022/05/22 13:52

yokota-g

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問