0

私は3つのドメインクラスを持っています

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 を使用すると、のproductNameような IDが表示され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

データモデルに基づいて、ジガーの答えは正しいです。grails select タグは、optionValue が要素 (Product) の Bean プロパティの名前であることを想定しています。select タグはその値に対して toString() を呼び出すため、これを使用するには、ProductName クラスの toString() メソッドをオーバーライドする必要があります。

クロージャ コードを optionValue として渡すことにより、ProductName の「name」プロパティが必要であることを gsp 内で指定することもできます。

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