|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectjp.terasoluna.fw.beans.JXPathIndexedBeanWrapperImpl
public class JXPathIndexedBeanWrapperImpl
JXPathを用いたIndexBeanWrapperの実装。
JavaBean、Map、DynaBeanからプロパティ名を指定することにより、 属性値を取得することができる。 属性が配列・List型の場合、該当する属性値を全て取得する。
Mapオブジェクト、またはMap型属性を使用する場合、 以下の文字はMapキーに使用できない。
以下のようなEmployeeオブジェクトのfirstName属性にアクセスする。
public class Employee { private String firstName; public void setFirstName(String firstName) { this.firstName = firstName; } public String getFirstName() { return firstName; } }
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// アクセス対象となるEmployeeオブジェクト Employee emp = new Employee(); emp.setFirstName("めい"); IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
2.firstName属性にアクセスする。 引数のStringには属性名を指定する。
Map<String, Object> map = bw.getIndexedPropertyValues("firstName");キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値"); System.out.println("========================"); Set<String> keyset = map.keySet(); for (String key : keyset) { System.out.print(key + ":"); System.out.println(map.get(key).toString()); }結果は以下のように出力される。
Mapのキー:Mapの値 ======================== firstName:めい
以下のようなAddressオブジェクトの配列型属性numbersにアクセスする。
public class Address { private int[] numbers; public void setNumbers(int[] numbers) { this.numbers = numbers; } public int[] getNumbers() { return numbers; } }
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// Employeeの属性となるAddressオブジェクト Address address = new Address(); address.setNumbers(new int[]{1, 2, 3}); IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(address);
2.numbers属性にアクセスする。 'numbers[]'のように配列記号を付ける必要はなく、 属性名を指定すればよいことに注意すること。
Map<String, Object> map = bw.getIndexedPropertyValues("numbers");キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値"); System.out.println("========================"); Set<String> keyset = map.keySet(); for (String key : keyset) { System.out.print(key + ":"); System.out.println(map.get(key).toString()); }結果は以下のように出力される。
Mapのキー:Mapの値 ======================== numbers[0]:1 numbers[1]:2 numbers[2]:3List型のオブジェクトに対しても、同様の方法で値が取得できる。
下記のようなEmployeeオブジェクトから、 ネストされたAddressクラスのstreetNumber属性にアクセスする。
public class Employee { private Address homeAddress; public void setHomeAddress(Address homeAddress) { this.homeAddress = homeAddress; } public Address getHomeAddress() { return homeAddress; } } public class Address { private String streetNumber; public void setStreetNumber(String streetNumber) { this.streetNumber = streetNumber; } public String getStreetNumber() { return streetNumber; } }
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// Employeeの属性となるAddressオブジェクト Address address = new Address(); address.setStreetNumber("住所"); // Employee Employee emp = new Employee(); emp.setHomeAddress(address); IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
2.EmployeeオブジェクトのhomeAddress属性にネストされた、 streetNumber属性にアクセスする。 ネストした属性を指定する場合、以下のコードのように'.'(ドット)で 属性名を連結する。
Map<String, Object> map = bw.getIndexedPropertyValues("homeAddress.streetNumber");キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値"); System.out.println("========================"); Set<String> keyset = map.keySet(); for (String key : keyset) { System.out.print(key + ":"); System.out.println(map.get(key).toString()); }結果は以下のように出力される。
Mapのキー:Mapの値 ======================== homeAddress.streetNumber:住所ネストした属性が配列・List型であっても、値を取得することができる。
下記のようなEmployeeオブジェクトのMap属性addressMapにアクセスする。
public class Employee { private Map addressMap; public void setAddressMap(Map addressMap) { this.addressMap = addressMap; } public Map getAddressMap() { return addressMap; } }
1.コンストラクタでアクセス対象のJavaBeanをラップする。
// Employeeの属性となるMap Map addressMap = new HashMap(); addressMap.put("home", "address1"); // Employee Employee emp = new Employee(); emp.setAddressMap(addressMap); IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
2.EmployeeのaddressMap属性中にセットしたhomeキーにアクセスする。 Map型属性のキーを指定する場合、以下のコードのようにかっこでキー名を連結する。
Map<String, Object> map = bw.getIndexedPropertyValues("addressMap(home)");キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値"); System.out.println("========================"); Set<String> keyset = map.keySet(); for (String key : keyset) { System.out.print(key + ":"); System.out.println(map.get(key).toString()); }結果は以下のように出力される。
Mapのキー:Mapの値 ======================== addressMap(home):address1Map型属性のキー名は()(括弧)で囲われることに注意すること。
本クラスはJavaBeanだけではなく、Mapオブジェクトへのアクセスが可能である。
1.コンストラクタでアクセス対象のMapをラップする。
// Employeeの属性となるMap Map addressMap = new HashMap(); addressMap.put("home", "address1"); IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(addressMap);
2.addressMapにセットしたhomeキーにアクセスする。
Map<String, Object> map = bw.getIndexedPropertyValues("home");キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値"); System.out.println("========================"); Set<String> keyset = map.keySet(); for (String key : keyset) { System.out.print(key + ":"); System.out.println(map.get(key).toString()); }結果は以下のように出力される。
Mapのキー:Mapの値 ======================== home:address1Mapオブジェクトに対しても、配列・List型属性、 ネストした属性の取得が可能である。
本クラスはJavaBeanだけではなく、DynaBeanへのアクセスが可能である。
1.コンストラクタでアクセス対象のDynaBeanをラップする。
// DynaBeanにラップされるJavaBean Address address = new Address(); address.setStreetNumber("住所"); // DynaBean DynaBean dynaBean = new WrapDynaBean(address); IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(dynaBean); -------------------------------------------------------- 上記のコードで使用しているAddressオブジェクトは以下のようなクラスである。 public class Address { private String streetNumber; public void setStreetNumber(String streetNumber) { this.streetNumber = streetNumber; } public String getStreetNumber() { return streetNumber; } }
2.DynaBeanのstreetNumber属性にアクセスする。
Map<String, Object> map = bw.getIndexedPropertyValues("streetNumber");キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
System.out.println("Mapのキー:Mapの値"); System.out.println("========================"); Set<String> keyset = map.keySet(); for (String key : keyset) { System.out.print(key + ":"); System.out.println(map.get(key).toString()); }結果は以下のように出力される。
Mapのキー:Mapの値 ======================== streetNumber:住所
フィールドの概要 | |
---|---|
protected org.apache.commons.jxpath.JXPathContext |
context
JXPathコンテキスト。 |
コンストラクタの概要 | |
---|---|
JXPathIndexedBeanWrapperImpl(Object target)
コンストラクタ。 |
メソッドの概要 | |
---|---|
protected String |
escapeMapProperty(String property)
MapプロパティをXPath形式にエスケープする。 |
protected String |
extractAttributeName(String node)
属性名を取り出す。 |
protected String |
extractDecrementIndex(String node)
デクリメントした添え字を取り出す。 |
protected String |
extractIncrementIndex(String property)
インクリメントされた添え字を取り出す。 |
protected String |
extractIncrementIndex(String property,
int increment)
インクリメントされた添え字を取り出す。 |
protected String |
extractIndex(String property)
配列インデックスを取得する。 |
protected String |
extractMapAttributeName(String node)
Mapの属性名を取り出す。 |
protected String |
extractMapKey(String node)
Mapキーを取り出す。 |
protected String |
extractMapPropertyKey(String property)
Map型属性のキー名を取り出す。 |
protected String |
extractMapPropertyName(String property)
Map型属性のプロパティ名を取り出す。 |
Map<String,Object> |
getIndexedPropertyValues(String propertyName)
指定したプロパティ名に一致する属性値を返す。 |
protected boolean |
isMapAttribute(String node)
Map属性を持つオブジェクトかどうか判断する。 |
protected boolean |
isMapObject(String node)
Mapオブジェクトかどうか判断する。 |
protected boolean |
isMapProperty(String property)
Map型属性かどうか判断する。 |
protected String |
toPropertyName(String xpath)
XPath形式の文字列をプロパティ形式の文字列に変換する。 |
protected String |
toXPath(String propertyName)
プロパティ形式の文字列をXPath形式の文字列に変換する。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
protected org.apache.commons.jxpath.JXPathContext context
コンストラクタの詳細 |
---|
public JXPathIndexedBeanWrapperImpl(Object target)
target
- 対象のオブジェクトメソッドの詳細 |
---|
public Map<String,Object> getIndexedPropertyValues(String propertyName)
IndexedBeanWrapper
内の getIndexedPropertyValues
propertyName
- プロパティ名
protected String toXPath(String propertyName)
propertyName
- プロパティ形式文字列
protected String extractIncrementIndex(String property)
property
- Javaプロパティ名。
protected String extractIncrementIndex(String property, int increment)
property
- プロパティ名。increment
- インクリメントする値。
protected String extractIndex(String property)
property
- プロパティ名。
protected String escapeMapProperty(String property)
property
- Javaプロパティ名。
protected String extractMapPropertyName(String property)
property
- Javaプロパティ名。
protected String extractMapPropertyKey(String property)
property
- Javaプロパティ名。
protected boolean isMapProperty(String property)
property
- Javaプロパティ名。
protected String toPropertyName(String xpath)
xpath
- XPath形式文字列
protected String extractAttributeName(String node)
node
- XPathのノード。
protected String extractMapAttributeName(String node)
node
- XPathのノード。
protected String extractMapKey(String node)
node
- XPathのノード。
protected String extractDecrementIndex(String node)
node
- XPathのノード。
protected boolean isMapAttribute(String node)
node
- XPathのノード。
protected boolean isMapObject(String node)
node
- XPathのノード。
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |