次のような複合ドメイン オブジェクトがあります。
class Person
{
static embedded = ['forSale']
Boolean isSelling
House forSale
}
class House
{
Integer numBedrooms
}
次のように、numBedrooms の選択コントロールがあります。
<tr class="prop">
<td valign="top" class="name">
<label for="numBedrooms"><g:message code="person.numBedrooms.label" default="Num Bedrooms" /></label>
</td>
<td valign="top" class="value ${hasErrors(bean: personInstance, field: 'forSale.numBedrooms', 'errors')}">
<g:select name="numBedrooms" value="${fieldValue(bean: personInstance, field: 'forSale.numBedrooms')}"
noSelection="${['null':'Select a number...']}"
from="${1..6}"
/>
</td>
</tr>
select の fieldValue で forSale.numBedrooms を使用していることに注意してください。create-views によって生成される create ビューには forSale House オブジェクトのフィールドへの参照が含まれていないため、これがどのように行われるかを確認するための足場コードを作成できませんでした。
また、GSP 経由で複合フィールドにアクセスする例を見つけることもできなかったので、これは推測にすぎません。いずれにせよ、GSP ページはエラーなしで表示されますが、これはデータを保存できなかったことが原因かもしれません。
numBedrooms の値を URl クエリ文字列の一部として送り返します...
&numベッドルーム=2
これを行うと、コントローラーの保存コードがサイレントに失敗します-少なくともデータベースには何も書き込まれません。ほとんどすべてのデバッグ ロギングを有効にしましたが、ログに何か問題があることを示唆するメッセージが表示されません。
クエリ文字列から numBedrooms パラメーターを削除すると、保存は通常どおり進行するので、numBedrooms の解決に関係があると推測しています。
私が間違っていることと、問題を追跡するために何ができるかについての手がかりはありますか?