質問

私は、実行時にのみ存在するいくつかのことを保存したいドメインオブジェクトを持っています。私はドキュメントのを見て、transientsキーワードを見つけ、その、それの顔に私が探していたものでした。ここに私のドメインオブジェクトが...

のように見えるものです
class Contact {

    def Seeker

    def beforeInsert() 
    {
       initiatedDate = new Date()
    }

    Date initiatedDate
    Date acceptedDate

    static transients = ['pal']
    Seeker pal
}

ここでSeekerドメインオブジェクトでないGroovyのクラスが、いくつかのプロパティのプレースホルダである。

これまでのところ、すべての罰金であると予想されるように私の連絡先テーブルはpalフィールドを持っていません。連絡先の束のための私のContactController Iのクエリでは、c、その後、彼らのSeekerの仲間(源泉徴収方法の詳細)をルックアップし、新しいオブジェクトにpalフィールドを設定します。

c.pal = new Seeker();
c.pal.name = otherObject.name
render c as JSON

これは、すべての仲間オブジェクトはJSONから欠落していることを除いて正常に動作するようですが戻っています。

これは過渡現象の有効な使用ですか?ドキュメントは、彼らが機能ベースのゲッターとセッターのために便利であることを言及するが、私の場合、私は実際のオブジェクトをしたいです。私は私の物にgetPal()とsetPal()メソッドを書くべきか?

おかげ

役に立ちましたか?

解決

過渡は確かに持続されることから、ドメインオブジェクトに停止分野に使用されています。 (あなたは、コントローラにそれを置くことなく、PAL、フィールド上のいくつかのinitを実行したい場合は、のonLoad()イベントを使用するか、デフォルトのプロパティのゲッターをオーバーライドしますgetPal()メソッドを書くことができ)。あなたは正しいデフォルトのJSONのマーシャラーはフィールドのみを持続レンダリングことに注意することもあります。

自分のドメインをレンダリングするとき、私はその不要なプロパティがレンダリングされませんので、JSONオブジェクトマーシャラーを作成することが有用であることが分かってきたオブジェクトが、それはあまりにも、あなたの一時的な問題を解決するだろう。あなたはこの使用JSON.registerObjectMarshaller方法を行うことができます:

import grails.converters.JSON
...
class BootStrap {

    def init = {servletContext ->
        JSON.registerObjectMarshaller(Contact ) {
            def returnArray = [:]
            returnArray['id'] = it.id
            returnArray['initiatedDate'] = it.initiatedDate
            returnArray['acceptedDate'] = it.acceptedDate
            returnArray['pal'] = it.pal
            return returnArray
        }

        JSON.registerObjectMarshaller(Seeker) {
            ...
        }
あなたがBootStrap.groovyでマーシャラーを追加する場合は、

彼らはあなたのコントローラで利用できるようになります。

HTH

ます。http:// (また、これを見つけましたold.nabble.com/Taggable-plugin-and-JSON-converter-ts24830987.html#a24832970する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top