grails抽象域类:快速简单的脚手架方式,以便域的列表视图正确链接

时间:2012-05-22 19:09:53

标签: grails abstract-class

我正在开发一个Grails应用程序,其中少数子域类扩展了基本抽象域类。我还有一个父域类,它有许多抽象域类。当你运行" grails generate-all"对于Parent,然后创建一个包含一堆子项的父项,列表视图中的链接指向没有控制器或视图的抽象域类。让这种观点发挥作用的最简单方法是什么?如果问题有点模糊,下面是一些伪代码,以帮助使事情更清晰。

域类

abstract class Automobile{
    String description
}

class Car extends Automobile{}

class Truck extends Automobile{}

class Dealership{
   static hasMany = [automobiles:Automobile]
}

用汽车和卡车创建经销商

def car = new Car(description:"Toyota Camry").save()
def truck = new Truck(description : "Toyota Tacoma").save()

def dealership = new Dealership()
dealership.addToAutomobiles(car)
dealership.addToAutomobiles(truck)
dealership.save()

经销商生成的show.gsp将如下所示:

<htm>
 <table>
  <tr>
    <th>Id</th>
    <td>${dealershipInstance.id}</td>
  </tr>
  <tr>
    <th>Automobiles</th>
    <td>
      <ul>
        <g:each in="${dealershipInstance.automobiles}" status="i" var="automobileInstance">
          <li><g:link action="show" id="${automobileInstance.id}">${automobileInstance.description}</g:link></li>
        </g:each>
      </ul>
    </td>
  </tr>
 </table>
</html>

问题在于汽车实例的链接作为基础抽象类汽车没有自己的视图。所以&#34; Show&#34; action返回404.在这种情况下,链接到相应域类的最佳方法是什么?可能有一种简单的方法可以解决这个问题,我还没找到它。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

为了避免在我的gsp中编写groovy或java代码,我添加了一个带有classname的字符串变量,以便在gsp中轻松引用。

<g:link controller="${p.classname}" action="show" id="${p.id}">${p.description} ${p?.classname}</g:link>

答案 1 :(得分:1)

谢谢你。您的问题和答案会引导我找到与您类似的解决方案。但是,您不必为Domain类添加classname属性。它已经存在。

使用class.simpleName来获取所需的内容。

例如:

<g:link controller="${p.class.simpleName}" action="show" id="${p.id}">${p.description}</g:link>