0

我有三个域类

class Stock
{
   Product product
}

class Product
{
   ProductName productName
}

class ProductName
{
   String name
}

在 Stock 域的 create.gsp 中,这是默认代码生成:-

<tr class="prop">
  <td valign="top" class="name">
    <label for="name">
      <g:message code="stock.name.label" default="Product Name" />
    </label>
  </td>
  <td valign="top" class="value ${hasErrors(bean: stockInstance, field: 'name', 'errors')}">
    <g:select name="product.id"
              from="${com.ten.hp.his.pharmacy.Product.list()}"
              optionKey="id"
              optionValue="productName"
              value="${stockInstance?.product?.id}"  />
  </td>
</tr>

我的要求是在下拉列表中显示产品名称,但通过使用 optionValue,它显示的productNameid 类似于com.ten.ProductName:1. 我如何在下拉列表中显示产品名称。

4

2 回答 2

2

toString()在类中覆盖ProductName以仅返回productName

class ProductName
{
   String name

   @Override
   public String toString(){ return name } 
}
于 2012-06-14T11:16:52.793 回答
2

根据您的数据模型,Jigar 的答案是正确的。grails select 标记期望 optionValue 是您的元素(产品)的 bean 属性的名称。select 标记将对该值调用 toString(),因此要使用它,您需要覆盖 ProductName 类的 toString() 方法。

也可以通过传递闭包代码作为 optionValue 在 gsp 中指定您想要 ProductName 的“名称”属性。

optionValue="${{it.productName.name}}"
于 2012-06-14T16:05:52.580 回答