2 つのドメイン オブジェクトに関連するフィールドを含む登録フォームがあります。ユーザーとプロファイル。この関係は、User ドメイン クラスが所有する 1:1 のマッピングです。
ユーザー コントローラーの「登録」アクションは、フォームの値をマーシャリングし、検証エラーがなければユーザー オブジェクトを保持し、フォームが送信されるとアプリケーション ルートにリダイレクトします。それ以外の場合、コントローラーは失敗した値が事前入力されたフィールドを示す登録フォームにリダイレクトします。
ただし、実際には、検証が失敗した場合、失敗した値はビューに表示されません。以下は、登録アクションのコードです。
def registration = {
}
def register = {
def user = new User()
bindData(user, params)
if (user.save()) {
flash.message = 'Successfully Registered User'
redirect(uri: '/')
}else {
flash.message = 'Registration Failed!'
redirect(action: registration, params: [ user: user ])
}
}
以下は、ユーザーおよびプロファイル関連のフィールドを示すビューからの HTML の抜粋の例です。
<div class="row">
<label for="city"> City, State: </label>
<g:textField id="city" name="profile.city"
value="${user?.profile?.city}" size="28" />
<span class="red">*</span>
</div>
<hr />
<div class="row">
<label for="email"> E-mail address: </label>
<g:textField id="email" name="userId" value="${user?.userId}" size="28" />
<span class="red">*</span>
</div>
構文的には、すべて問題ないように見えます。値にアクセスするために適切な命名規則とグレイルの補間を使用しているので、これが期待どおりに動作しない理由については、私は機知に富んでいます。
コメントや提案をいただければ幸いです。
ありがとう、トム