データを入れ子になったプロパティを持つコマンドオブジェクトにデータをバインドする方法(非ドメインオブジェクト)

StackOverflow https://stackoverflow.com/questions/9011156

  •  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モデルですか?私はあなたが何を達成しようとしているのかわからないからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top