Spring MVC と Ext JS 4.1 でシンプルなユーザー アドレス帳を設計しています。他のユーザーへの参照を許可するために、Java で User クラスを定義しました。
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class User {
@JsonProperty
private String name;
@JsonProperty
private String email;
@JsonProperty
private List<User> friends = new ArrayList<User>();
}
@JsonIdentityInfoを使用して、Jackson が JSON に変換し、Ext JS と Spring の間で受け渡しを行う際に循環参照が正しく処理されるようにしました。JSON を次のように送信します。
{"data":[
{"@id":1,"name":"John","email":"john@email.com",
"friends":[
{"@id":2,"name":"Peter","email":"peter@email.com","friends":[1]}
]},
2],
"total":2,
"success":true}
ここで、John は @id 1 を持ち、Peter は @id 2 を持っています。Peter は John の友人であり、その逆も同様です。の前の 2"total"
は、Peter がすでに定義されているため、Peter への参照です。私の質問は、Jackson から動作する再帰的なデータ構造を取得したので、それらを Ext JS とどのように統合するのですか? 私はこれを持っていますmodels/User.js
Ext.define('AM.model.User', {
extend : 'Ext.data.Model',
fields : [ '@id', 'name', 'email' ],
idProperty : '@id',
hasMany : [ {
model : 'AM.model.User',
name : 'friends',
associationKey:'friends'
} ]
});
私は John をうまく読むことができ、 john.friends で Peter を読むことができますがdata
、すべての Ext JS が2
(Peter's @id
) であるため、Peter を読むことはできません。それらをExtJS.grid.Panelに表示していますが、ジョンだけが表示されています。ピーターの行は空白です。
ExtJS.data.Storeで Reader と Writer をオーバーライドする必要がありますか?