これは、Grailsの過渡の有効利用ですか?
-
23-09-2019 - |
質問
私は、実行時にのみ存在するいくつかのことを保存したいドメインオブジェクトを持っています。私はドキュメントのを見て、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する
)