2011-07-29 10 views
1

私のコードでは、Enum型のドメインオブジェクトを持っています。その列挙型は、データベースから節約し、検索します。私はドメインオブジェクトのリストをjsonセルに変換しています。列挙型を除くすべてのフィールドは、文字列かロングのいずれかです。 jsonが '反対側で'ピックアップされると、列挙型の名前または列挙型の値ではなく、列の[オブジェクトオブジェクト]が表示されます。これに役立つドメインまたはJSON側に何かがありますか?enumのGrails jsonセル

ドメインクラス以下のコード/例

class MyDomain { 
long id 
long otherValue 
MyEnum enu //Nullable per constraints 
//Mapping and constraints are not special. 
} 

列挙

enum MyEnum { 
ENUM1("Value1"),ENUM2("Value2") 
//constructor ommitted 
String myValue 
String toString() { myValue } 

JSON細胞の作成

def jsonCells = domainList.collect 
    { 
     [cell: [ 
       it.id, 
       it.otherValue, 
       it.enu?.value 
      ], 
      id: it.id] 
    } 

it.enuは?.VALUE作品。しかし、毎回その値を呼び出す必要がなく、オブジェクトに頼ることができる場所であれば、これを行うにはどうにかしてより良い方法がありますか?私は、toStringメソッドをオーバーライドするとそれを処理していると仮定していたでしょうが、明らかに私は間違っていました。私はそれが小さな問題のように思えますが、 ".value"を忘れるのは簡単です。特に、同じenumが多くのドメインオブジェクトで使用されるためです。アイデア?

答えて

1

オブジェクトをビルドするときに単にリストに入れているだけなので、あなたが特に何か他のことをしない限り(現在行っている場合を除き)オブジェクトとして扱います。

代わりにit.enu as Stringなどを使用することもできますが、それでも達成しようとしているものを達成できない可能性があります。

別の(多分overengineered?)な方法JSONを構築する際に値を返すドメイン自体のメソッドを作成し、そのメソッドを使用することです:

class MyDomain { 
    MyEnum enu 

    def enuVal() { 
     enu?.value 
    } 
} 

def jsonCells = domainList.collect { 
    [cell: [ 
     it.enuVal() 
    ], 
    ...] 

で私にとっては、JSONで it.enu?.valを使用したいと思うでしょう。 JSONレンダリングメソッドのテストを作成し、その値が期待どおりであることを確認して、忘れないようにします。

+0

これは意味があります。私たちのほとんどがJavaプログラマーでgroovy/grailsに入っているので、it.enuVal()を呼び出すことを覚えておくと、it.enu?.valueを呼び出すことよりも簡単です。私は、私たちがit.enu.valueをデータ・ディスプレイを完全に消滅させるit.enu.valueと呼ぶことを心配しています:) – Joseph

+1

@Joseph - ドメインを常に同じ方法でレンダリングしている場合、別のオプションはメソッドを作成することです必要に応じて書式設定されたプロパティのリストを返すドメイン(例えば、 'toJson()')上で実行されます。しかし、それはあなたの要件と使い方にかかっていると思います。 –

関連する問題