Подтвердить что ты не робот

Можем ли мы иметь более одного поля в g: select optionValue?

Есть ли способ показать более одного имени поля в 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...']}"/>
4b9b3361

Ответ 1

Вы можете передать закрытие для своего значения параметра, если вы не хотите изменять класс домена:

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

Ответ 2

Вы можете ввести свойство переходного процесса в свой класс домена, который вы можете использовать в опции Value g: select:

class Book {
    String name
    String author

    static transients = [ 'nameAndAuthor' ]

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

Ваш g: выбор выглядит так:

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

Ответ 3

Или добавьте метод toString в класс Book

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

то просто опустите параметр Value

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

По крайней мере, когда вы смотрите на домен в своем отладчике, он имеет узнаваемое значение человека.

Надеюсь, что это поможет.