我正在开发一个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.在这种情况下,链接到相应域类的最佳方法是什么?可能有一种简单的方法可以解决这个问题,我还没找到它。
提前感谢您的帮助。
答案 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>