2010-11-19 2 views
12

Есть ли способ показать более одного имени поля в optionValue?Можем ли мы иметь более одного поля в g: select 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...']}"/> 

ответ

10

Вы можете ввести временное свойство в классе домена, который вы можете использовать в OptionValue в г: выберите:

class Book { 
    String name 
    String author 

    static transients = [ 'nameAndAuthor' ] 

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

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

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

thanksDaniel Engmann – Honey

38

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

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

Это работает замечательно, но моя IDE (IntelliJ) отмечает это как ошибку неоднозначного кода. Кто-нибудь обошел это? – RasTheDestroyer

+0

Я всегда забываю, как я могу это сделать! Благодаря! = D – ricardogobbo

5

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

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

затем просто опустить OptionValue

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

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

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

Смежные вопросы