如何在 Grails 中自定义 select 标签
How to customise select tag in Grails
我在客户和产品之间有这种 hasMany
关系。当我生成视图和控制器时,在产品的创建视图中我可以选择一个客户端。默认情况下,Grails 显示 select 仅包含客户端的 id。我该如何改变它?例如我只想显示客户端的名称而不是 id。
我正在使用 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
}
我相信默认生成的select列表会使用对象的toString()
方法作为每个<option>
的显示值和key值的id。更改默认显示的最简单方法是覆盖产品中的 toString()
class:
@Override
String toString() {
name
}
您可以通过指定 optionKey
和 optionValue
属性来自定义 select
的外观:
<g:select from="${Client.list()}" name="client" optionKey="FirstName" optionValue="id" />
详情见the ref doc。
如果您需要做一些更高级的事情,比如显示名字和姓氏,那么您可以对列表进行一些预处理:
<g:select from="${Client.list().collect{ [ id:it.id, name:it.firstName + ' ' + it.lastName ] }}" name="client" optionKey="name" optionValue="id" />
我在客户和产品之间有这种 hasMany
关系。当我生成视图和控制器时,在产品的创建视图中我可以选择一个客户端。默认情况下,Grails 显示 select 仅包含客户端的 id。我该如何改变它?例如我只想显示客户端的名称而不是 id。
我正在使用 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
}
我相信默认生成的select列表会使用对象的toString()
方法作为每个<option>
的显示值和key值的id。更改默认显示的最简单方法是覆盖产品中的 toString()
class:
@Override
String toString() {
name
}
您可以通过指定 optionKey
和 optionValue
属性来自定义 select
的外观:
<g:select from="${Client.list()}" name="client" optionKey="FirstName" optionValue="id" />
详情见the ref doc。
如果您需要做一些更高级的事情,比如显示名字和姓氏,那么您可以对列表进行一些预处理:
<g:select from="${Client.list().collect{ [ id:it.id, name:it.firstName + ' ' + it.lastName ] }}" name="client" optionKey="name" optionValue="id" />