0

私は単純な階層を持っています:

class Atom {}

class Text extends Atom { String value}

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

1つのTextオブジェクトと1つのUnitオブジェクトを作成し、Textの親としてUnitを選択するとします。正常に動作します。Unitでshowメソッドを呼び出すと、Unitが1つの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}は常にアトムを返します。だから、私の質問は-実際のクラス名を取得するにはどうすればよいですか?

4

2 に答える 2

1

より良い方法があるかもしれませんが、Atomにメソッドを追加し、Textでそれをオーバーライドして、適切な文字列を返す方法はどうでしょうか。

于 2012-10-20T13:01:46.993 に答える
1

おそらく、膨らんだオブジェクトの代わりにHibernateがプロキシを返すことについてGORMGotchaにぶつかっています。

あなたのリンクであなたは試すことができます:

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