如何在Grails中自定义选择标记

时间:2018-05-22 10:56:46

标签: select grails plugins field relation

我在客户端和产品之间存在hasMany关系。当我生成视图和控制器时,在产品的创建视图中我可以选择一个客户端。默认情况下,Grails显示一个仅包含客户端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
}

2 个答案:

答案 0 :(得分:0)

我相信默认生成的选择列表将使用对象的toString()方法作为每个<option>的显示值和键值的id。更改默认显示的最简单方法是覆盖产品类中的toString()

@Override
String toString() {
  name
}

答案 1 :(得分:0)

您可以指定selectoptionKey属性来自定义optionValue的外观:

<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" />