PersonDTO オブジェクトが JSON のオブジェクト表現であると仮定すると、次のようなインターフェイス モデル (AutoBeans を使用するための) があると仮定します。
// I'm leaving the setters out for brevity
public interface PersonDTO {
@PropertyName(value="FirstName")
String getFirstName();
@PropertyName(value="LastName")
String getLastName();
@PropertyName(value="Age")
Integer getAge();
@PropertyName(value="Details")
List<Details> getDetails();
}
public interface Details {
@PropertyName(value="Address")
String getAddress();
@PropertyName(value="City")
String getCity();
@PropertyName(value="ZipCode")
String getZipCode();
}
これが使用しているインターフェイス モデルにマップされている (または近似している) と仮定すると、質問に答えるために、その@Path
アノテーションを使用して、プロパティにアクセスするためのオブジェクト属性名 (JSON 名ではない) を指定します。そのため、単一の属性の場合、PropertyAccess 値が属性の名前と同じでない場合は、パス アノテーションを使用できます。あなたの例では、 PersonProperties 属性が大文字になっているため、次のようなものを使用できます。
@Path("firstName")
ValueProvider<PersonDTO, String> FirstName();
Details オブジェクトが単一のオブジェクトである場合は、記述したものと同様の表記を使用できます (@Path
注釈は、オブジェクト shim からプロパティにアクセスするために使用するゲッターを暗黙的に指定していることを思い出してください)。
@Path("details.address")
ValueProvider<PersonDTO, String> address();
// would return the address if Details was a single object
Details
ただし、JSON の例では、値が実際には のコレクションであることを示しているため、 Details の値は少し異なりますDetails
。その結果、すべての PersonDTO オブジェクトに対して複数の Details オブジェクトが存在するため、グリッドは詳細を表示する方法を認識できません。しかし、それはすでに明らかだと思いますので、特定の条件が適用されるときに、特定の行に住所を表示しようとしていると仮定しましょう。そのような場合、独自の ValueProvider を実装できます。例(私が思うSenchaの例から派生したもの):
public class AddressByCityValueProvider implements ValueProvider<PersonDTO, String> {
public final String cityKey;
public AddressByCityValueProvider(String specifiedKey) {
this.cityKey = specifiedKey;
}
// we will display their Address if the city is Boston
@Override
public String getValue(PersonDTO person) {
if (null != person.getDetails()) {
for (Details detail : person.getDetails()) {
if (detail.getCity().equalsIgnoreCase(cityKey)) {
return detail.getAddress();
}
}
}
return ""; // no address for specified city in object, return a blank String
}
@Override
public String getPath() {
return key;
}
次に、PropertyAccess クラスの ValueProvider を使用していた場所で、独自の ValueProvider を置き換えて、使用するキーを指定します。列構成の場合、都市がボストンの場合、この ValueProvider を使用して番地を返すことができます。
ColumnConfig<PersonDTO, String> addressColumn =
new ColumConfig<PersonDTO, String>(new AddressByCityValueProvider("Boston"), 100, "Address");
もちろんこれは一例に過ぎませんが、ご理解いただければ幸いです。