- - PR -
DigesterでのオブジェクトのMapへの格納について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-04 21:11
以下のようなデーターが存在します。
<root> <user id="admin" password="password"/> <user id="user1" password="12345678"/> <user id="user2" password="87654321"/> </root> userをそれぞれUserValueというBeanに格納してListにセットする場合、 Digetserルールによる記述では <digester-rules> /* root ノードをみつた時点で Listオブジェクトを作成 */ <object-create-rule pattern="root" classname="java.util.ArrayList" /> /* userlistの子ノードであるuserノードをみつける毎に */ <pattern value="root/user"> /* uservalueオブジェクト作成 */ <object-create-rule classname="UserValue"/> /* 全てのレコードをセットして */ <set-properties-rule /> /* 先に作成したListに格納する */ <set-next-rule methodname="add" /> </pattern> </digester-rules> で実現できるのですが、例えばuserのidをKeyとしてMapに格納する場合どうよう な記述をすればいいのでしょう。 ちなみにcommons-digesterのバージョンは1.7です。 いろいろ調べてみてcall-method-ruleとcall-param-ruleを利用すれば..と思っ たのですがうまくいきません。なにとぞよろしくお願いします。 |
|
投稿日時: 2005-11-22 15:46
はじめましてKacと申します。
以下のようなルールでどうでしょうか? <!-- HashMapを生成する --> <object-create-rule pattern="root" classname="java.util.HashMap" /> <pattern value="root/user"> <!-- HashMap.put()をcall 引数は2つ --> <call-method-rule methodname="put" paramcount="2" /> <!-- put()の第1引数は id属性 --> <call-param-rule paramnumber="0" attrname="id" /> <!-- put()の第2引数用にBeanを生成する --> <object-create-rule classname="UserValue" /> <!-- Beanに値をセットする --> <set-properties-rule /> <!-- 生成したBeanはスタックの一番上にあるからそれを第2引数に指定する --> <call-param-rule paramnumber="1" stack-index="0" /> </pattern> |
1