2010-11-19 11 views
12

¿Hay alguna forma de mostrar más de un nombre de campo en optionValue?¿Podemos tener más de un campo en g: seleccione optionValue?

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" optionValue="name" 
      noSelection="${['null':'Select Publisher...']}"/> 

Expe:

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" optionValue="name and author" 
      noSelection="${['null':'Select Publisher...']}"/> 

Respuesta

10

Se podría introducir una propiedad transitoria en su dominio de clase, que se puede utilizar en el optionvalue de la g: seleccione:

class Book { 
    String name 
    String author 

    static transients = [ 'nameAndAuthor' ] 

    public String getNameAndAuthor() { 
     return "$name, $author" 
    } 
} 

Su g: seleccionar se ve luego como:

<g:select name="id" from="${Books.list()}" optionKey="id" value="" 
    optionValue="nameAndAuthor" 
    noSelection="${['null':'Select Publisher...']}" /> 
+0

graciasDaniel Engmann – Honey

38

Puede pasar un cierre en el valor de la opción si no desea modificar su dominio de clase:

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" optionValue="${{it.name +' '+it.author}}" 
      noSelection="${['null':'Select Publisher...']}"/> 
+0

Esto funciona de maravilla pero mi IDE (IntelliJ) está marcando esto como un error de código bloque ambiguo. ¿Alguien ha sabido esto? – RasTheDestroyer

+0

Siempre olvido cómo puedo realizar eso! ¡Gracias! = D – ricardogobbo

5

O añadir un método toString de la clase de libro

public String toString() { 
"${name} ${author}" 
} 

luego simplemente omitir el optionvalue

<g:select name="id" from="${Books.list()}" optionKey="id" 
      value="" noSelection="${['null':'Select Publisher...']}"/> 

Por lo menos, cuando mira el dominio en su depurador, tiene un valor reconocible para el ser humano.

Espero que esto ayude.

Cuestiones relacionadas