プログラミング Java

ModelからBindingResultが消える原因と対処方法

投稿日:

環境

Java(SpringFramework)
Thymeleaf

状況

更新画面でバリデーションエラーにより更新が失敗したというようなケースにおいて、
BuindingResultにFormのエラーを格納して更新画面に戻したが、BuindingResultのエラーが画面に表示されない。
 

原因

BindingResultはModelに保持されており、保持しているAttributeNameと同じもので上書きされることで消えてしまいます。

以下はエラー時にModelに保持している情報の一部(hogeFormに3つのエラーがあったことを示しています)。
{hogeForm=HogeForm(cd=1, name=, unitPrice=null, version=0), org.springframework.validation.BindingResult.hogeForm=org.springframework.validation.BeanPropertyBindingResult: 3 errors

このModelを更新画面に戻す際に、hogeFormを上書きすることでエラーが消えてしまいます。
以下は、DBから取得した結果をViewに渡そうとして上書いてしまった例です。

model.addAttribute(“hogeForm”, hogeForm) としている部分で、hogeFormが上書きされてエラーが消えてしまいます。
{materialForm=MaterialForm(cd=1, name=1, unitPrice=1, version=0)}

私の場合、
更新画面を表示するメソッド(DBから取得したデータをFormに格納して表示)を、
エラー時に戻す際にも利用してしまったために起こりました。(凡ミス)
 

対処方法

エラーで更新画面に戻す場合、POSTされたFormの値を戻すようにすることで解消しました。
(editFormメソッド)

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

プログラミングを上達させるために私がやってきたこと・やっていること

私の上達過程 写経 自分のレベルに合う本をもとに写経しては、コードの意味を調べて理解し、少しづつ体に染み込ませるように身に着けていきました。 とにかく初心者のころは右も左も分からず、ちょっとしたエラー …

【SpringBoot入門】#9~ 更新画面の作成

左側のコンテンツ40% 右側のコンテンツ60% ※2021/01/09  画面遷移等のバックエンド側の内容が抜けていたので追記しました。 概要 検索結果一覧から編集ボタン押下で遷移してくる更新画面です …

【SpringBoot入門】#11~ 削除ダイアログの作成

概要 検索結果から削除機能を呼び出した際に、削除を確認するためのダイアログです。 実装はjQueryで行いますので、mavenへの追加作業等の準備を別途行います。 イメージ jQueryの準備 jQu …

【Java】重複しないリストはSetを使う!(用途別 3種類)

概要 重複しないリストは、「Setに格納することで重複を除外してくれる」というのは多くの記事で紹介されています。 ここでは、Setに格納した後のデータの並び順も考慮したいという要件に対応するために、3 …

【Java入門】クラスの継承、オーバーライド

概要 クラスの継承とは、継承元(親)のフィールド(値)、メソッド(機能)を継承先(子)に引き継がせることです。 継承先(子)では、追加のフィールド(値)、メソッド(機能)を持つことができます。 つまり …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。