Grails 如何在gsp中显示域值

Grails 如何在gsp中显示域值,grails,groovy,Grails,Groovy,我有三个域类 class Stock { Product product } 及 及 在Stock domain的create.gsp中,这是默认代码生成:- <tr class="prop"> <td valign="top" class="name"> <label for="name"> <g:message code="stock.name.label" default="Product Name" />

我有三个域类

class Stock
{
   Product product
}

在Stock domain的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,它将显示
productName
id,就像
com.ten.productName:1
。如何在下拉列表中显示产品名称。

在类
ProductName
中重写
toString()
以仅返回
ProductName

在类
ProductName
中重写
toString()
,只返回
ProductName


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

还可以通过将闭包代码作为optionValue传递,在gsp中指定您想要ProductName的“name”属性

optionValue="${{it.productName.name}}"

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

还可以通过将闭包代码作为optionValue传递,在gsp中指定您想要ProductName的“name”属性

optionValue="${{it.productName.name}}"

thnks,但是我们不能在create.gsp页面中显示产品名称吗?不确定尝试使用
optionValue=“productName.name”
它会显示如下异常:-没有这样的属性:productName.name for class:com.ten.hp.his.pharmacy.ProductTry with
optionValue=“${it.produceName.name}”
thnks,但是我们不能在create.gsp页面中显示产品名称吗?不确定是否尝试使用
optionValue=“productName.name”
它会显示如下异常:-没有这样的属性:productName.name for class:com.ten.hp.his.pharmacy.ProductTry with
optionValue=“${it.produceName.name}}”
class ProductName
{
   String name

   @Override
   public String toString(){ return name } 
}
optionValue="${{it.productName.name}}"