Как привязать данные к объекту команды, который имеет вложенное свойство?(не доменный объект) - PullRequest
1 голос
/ 26 января 2012

Я пытаюсь привязать некоторые данные к объекту, который является частью объекта команды.Объект остается нулевым при попытке его использовать.Возможно, я не даю правильные данные в gsp, но я понятия не имею, что я делаю неправильно!

Я ожидаю, что когда я отправлю форму с именем поля 'book.title', это будет сопоставленов объект команды .. но это не удается .. Заголовок остается [null]

Всякий раз, когда я изменяю объект команды и форму, чтобы использовать заголовок String как свойство, оно работает ..

// 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'?

Ответы [ 2 ]

7 голосов
/ 26 января 2012

Попробуйте инициализировать его перед привязкой, например:

// the command object
class BooksBindingCommand {
   Book book = new Book()
}
0 голосов
/ 26 января 2012

Просто быстрый удар по нему.

Имя поля формы, вероятно, должно быть 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
}

Является ли BooksBindingCommand моделью? Потому что я не уверен, чего ты пытаешься достичь.

...