2012-10-20 20 views
0

我有簡單的層次結構:的Grails - 顯示正確的類名

class Atom {} 

class Text extends Atom { String value} 

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

比方說,我們創建一個文本對象和一個單元對象,並作爲文本的家長選擇單位。它工作正常。當我在單元上調用show方法時,我看到我的單元由一個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> 

好吧,數據庫存儲領域中的「類」的實際原子類型,所以我編輯的行3:

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

而$ {a.class}總是返回原子。 所以,我的問題是 - 我們如何得到實際的類名?

+0

不{A的instanceof文本? 'Text':'Atom'}當用作控制器屬性的值時工作嗎? – sync

回答

1

您可能碰到了有關Hibernate返回代理而不是膨脹對象的GORM Gotcha

在你的鏈接,你可以嘗試:

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

它的工作原理!感謝您指出它發生的原因。 – BoredT

1

可能有更好的方法,但how.about在Atom中添加一個方法並在Text中覆蓋它,返回相應的字符串?

+0

您的方法也可行,謝謝! – BoredT