Grails - 显示正确的班级名称

时间:2012-10-20 08:57:01

标签: grails

我有简单的层次结构:

class Atom {}

class Text extends Atom { String value}

class Unit { 
    List atoms
    static hasMany = [ atoms:Atom ] 
}

假设我们创建了一个Text对象和一个Unit对象,并选择Unit作为Text的父对象。它工作正常。当我在Unit上调用show方法时,我看到我的Unit包含一个Atom。当我点击这个原子时,它会将我重定向到原子控制器,但我的原子实际上是文本,我想看看文本控制器。这是预期的行为,因为在我的show.gsp中有这样的代码:

<g:each in="${unitInstance.atoms}" var="a">
    <span class="property-value" aria-labelledby="atoms-label">
        <g:link controller="atom" action="show" id="${a.id}">
            ${a?.encodeAsHTML()}
        </g:link>
    </span>
</g:each>

好的,数据库将实际的原子类型存储在字段“class”中,所以我编辑了第3行:

<g:link controller="${a.class}" action="show" id="${a.id}">    

$ {a.class}总是返回原子。 所以,我的问题是 - 我们怎样才能获得实际的班级名称?

2 个答案:

答案 0 :(得分:1)

可能有更好的方法,但是如何在Atom中添加一个方法并在Text中覆盖它,返回相应的字符串?

答案 1 :(得分:1)

你可能正在点击关于Hibernate返回代理的GORM Gotcha而不是膨胀的对象。

在您的链接中,您可以尝试:

<g:link controller="${Atom.get(a.id).getClass()}" ... />