¿Cómo enlazar los datos a un objeto de comando que tiene una propiedad anidada?(Objeto de dominio)

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

  •  14-11-2019
  •  | 
  •  

Pregunta

Estoy tratando de atar algunos datos a un objeto que forma parte de un objeto de comando.El objeto permanece nulo al intentar usarlo.Probablemente no estoy dando los datos correctos en el GSP, pero no tengo ni idea de lo que estoy haciendo mal!

Espero que cuando envíe un formulario con un nombre de campo 'Book.Title' Esto se asignará en el objeto de comando ... pero esto falla. El título se mantiene [null]

Cada vez que cambio el objeto de comando y el formulario para usar el título de la cadena como la propiedad, funciona.

// 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
}

¿Alguna sugerencia sobre por qué la unión de 'Book.Title' falla?

¿Fue útil?

Solución

Trate de inicializarlo antes de la encuadernación, como:

// the command object
class BooksBindingCommand {
   Book book = new Book()
}

Otros consejos

Sólo una puñalada rápida.

El nombre del campo de formulario probablemente debería ser Book_title en lugar de usar un período (no está seguro si se convierte en un problema cuando se maneja en el controlador).

<g:textField name="book_title" value="Lord Of the Rings"/><br>

En su controlador, cree primero su modelo de libro, luego asignelo a la clase con la que desea que le gustaría.

def create = {
  def mybook = new Book()
  mybook.title = params.book_title
  def binder = new BooksBindingCommand()
  binder.book = mybook
}

¿Es el booksBindingCommand un modelo?Porque no estoy seguro de lo que estás tratando de lograr.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top