データを入れ子になったプロパティを持つコマンドオブジェクトにデータをバインドする方法(非ドメインオブジェクト)
-
14-11-2019 - |
質問
コマンドオブジェクトの一部であるオブジェクトにデータをバインドしようとしています。使用しようとすると、オブジェクトはnullになります。おそらく私はGSPに正しいデータを与えていませんが、私は何を間違っているのか私は何をしていません!
フィールド名 'book.title'を使ってフォームを送信すると、これはコマンドオブジェクトにマッピングされることを期待しています。
コマンドオブジェクトを変更し、文字列タイトルをプロパティとして使用するようにフォームを変更するたびに。
// the form that submits the data
<g:form>
<g:textField name="book.title" value="Lord Of the Rings"/><br>
<br><br>
<g:actionSubmit action="create" value="Create!"/>
</g:form>
// the controller code
def create = { BooksBindingCommand cmd ->
println cmd?.book?.title // the book property always stays null
redirect(action: "index")
}
// the command object
class BooksBindingCommand {
Book book
}
// the book class, simple plain groovy class
class Book {
String title
}
.
'book.title'のバインディングが失敗する理由についての提案は?
解決
バインディング前にそれを初期化してみてください。
// the command object
class BooksBindingCommand {
Book book = new Book()
}
. 他のヒント
それで素早い刺した。
フォームフィールド名は、おそらくピリオドを使用するのではなくbook_titleです(コントローラ内で処理されたときに問題になった場合は確かない)。
<g:textField name="book_title" value="Lord Of the Rings"/><br>
.
あなたのコントローラでは、あなたの本モデルを最初に作成してから、それをバインドしたいクラスに割り当てます。
def create = {
def mybook = new Book()
mybook.title = params.book_title
def binder = new BooksBindingCommand()
binder.book = mybook
}
.
書籍BindingCommandモデルですか?私はあなたが何を達成しようとしているのかわからないからです。
所属していません StackOverflow