0

我有简单的层次结构:

class Atom {}

class Text extends Atom { String value}

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

假设我们创建一个 Text 对象和一个 Unit 对象,并选择 Unit 作为 Text 的父级。它工作正常。当我在 Unit 上调用 show 方法时,我看到我的 Unit 由一个 Atom 组成。当我点击这个 atom 时,它会将我重定向到 atom 控制器,但我的 atom 实际上是文本,我想查看 Text 控制器。这是预期的行为,因为在我的 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>

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

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

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

4

2 回答 2

1

您可能遇到了关于 Hibernate 返回代理而不是膨胀对象的GORM Gotcha 。

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

<g:link controller="${Atom.get(a.id).getClass()}" ... />
于 2012-10-23T13:39:01.757 回答
1

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

于 2012-10-20T13:01:46.993 回答