Как настроить тег select в Grails

The NinoX спросил: 28 апреля 2018 в 09:16 в: select

У меня есть отношение hasMany между клиентом и продуктом. Когда я создаю представления и контроллеры, в представлении создания продукта я могу выбрать клиента. По умолчанию Grails отображает выбор, содержащий только идентификатор клиентов. Как я могу это изменить? Например, я хочу показать только имя клиента, а не идентификатор.

Я использую Grails 3.3. Вот код домена:

client.groovy:

class client {
    String FirstName
    String LastName    static hasMany = [products: Product]
}

product.groovy:
class product {
    String Name
    int Price
    Client c    static belongsTo = Client
}

2 ответа

Есть решение
injecteer ответил: 29 апреля 2018 в 08:04

Вы можете настроить способ отображения select, указав атрибуты optionKey и optionValue:

<g:select from="${Client.list()}" name="client" optionKey="FirstName" optionValue="id" />

Подробную информацию см. В документе ref.

Если вам нужно сделать что-то странное, например показать сначала имя и фамилию, тогда вы можете предварительно обработать список:

<g:select from="${Client.list().collect{ [ id:it.id, name:it.firstName + ' ' + it.lastName ] }}" name="client" optionKey="name" optionValue="id" />
Trebla ответил: 28 апреля 2018 в 04:22

Я считаю, что созданный по умолчанию список выбора будет использовать метод toString() объекта в качестве отображаемого значения для каждого <option> и идентификатора для значения ключа. Самый простой способ изменить отображение по умолчанию - переопределить toString() в вашем классе продукта:

@Override
String toString() {
  name
}