単純なテキスト入力フィールドがあり、あるオブジェクトのデフォルト値を設定し、その最終値を別のオブジェクトに保存する必要があります。次のコードは機能していません。
<div th:object="${form}">
<input class="form-control"
type="text"
th:value="${client.name}" //this line is ignored
th:field="*{clientName}"/>
</div>
フォームはDTOオブジェクトであり、クライアントはデータベースのエンティティオブジェクトです。
この状況を解決する正しい方法は何ですか?
動作しないということは、つまり、初期値がclient.name = "Foo"およびform.clientName = nullであると言えます。入力フィールドの表示値が「Foo」であり、フォーム送信後にform.clientName値が「Foo」になる必要があります。ただし、入力フィールドには何も表示されず、送信時にはform.clientNameの値はまだnullです。
興味のある方は、次の構造を使用してこの問題を解決してください(別の質問で答えを見つけました)。
th:attr="value = ${client.name}"
この方法にアプローチできます。
th:field
を使用する代わりに、html id
とname
を使用します。 th:value
を使用して値を設定します
<input class="form-control"
type="text"
th:value="${client.name}" id="clientName" name="clientName" />
これがあなたを助けることを願っています
フォームの価値を維持したままページに戻る必要がない場合は、次のようにすることができます。
<form method="post" th:action="@{''}" th:object="${form}">
<input class="form-control"
type="text"
th:field="${client.name}"/>
それはある種の魔法です。
ユーザー入力の間違いがあるページに戻るなど、フォームの入力値を保持することが重要な場合は、次のようにする必要があります。
<form method="post" th:action="@{''}" th:object="${form}">
<input class="form-control"
type="text"
th:name="name"
th:value="${form.name != null} ? ${form.name} : ${client.name}"/>
ということは:
クライアントBeanをフォームBeanにマップする必要はありません。そして、フォームを送信すると、値はnullではなく「」(空)になるため、機能します