0

Dozer を使用してオブジェクト マッピングを行っています。この特定のものをマッピングできないというだけで、すべてがうまく機能します。

<mapping>
<class-a>User</class-a>
<class-b>UAUserBean</class-b>
<field>
<a>RightLst.Right</a>
<b>Rights</b>
<a-hint>Right</a-hint>
<b-hint>UARightBean</b-hint>
</field>
<field>
<a>RightLst.NumInLst</a> 
<b>Rights.length</b> 
</field>
</mapping>

//here RightLst is an object of a class and numInLst (int prop)
//rights is an array of objects

私がやりたいことは

lUser.getRightLst().setNumInLst(uaUserBean.getRights().length);

助言がありますか??

前もって感謝します。


User{ 
protected RightLst rightLst;
}

RightLst{
protected Integer numInLst;
protected Collection right = new ArrayList();
}

public class UAUserBean{
private UARightBean[] rights;
}
4

1 に答える 1

1

これを行う場合:

...
   <b>rights.length</b> 
</field>

Dozer は配列の最初の位置にアクセスしようとし、 (配列の型である)のインスタンスで長さrightsプロパティのゲッターを呼び出そうとしますが、明らかに長さプロパティは存在せず、Dozer は例外をスローします。UARightBeanUARightBean

UAUserBeanプロパティの長さを返すゲッター メソッドを作成することをお勧めします。次のrightsようになります。

 class UAUserBean {
        ... 
        public int getRightsLength() {
            return rights != null ? rights.length : 0;
        }       
    }

マッピング ファイル:

<class-a>User</class-a>
<class-b>UAUserBean</class-b>
<field>
    <a>rightLst.numInLst</a> 
    <b>rightsLength</b> 
</field>

を変更できない場合、最後のオプションは からへUAUserBeanのカスタム コンバーターになりますが、見栄えが悪くなります。UARightBean[]Integer

于 2012-08-07T16:05:33.650 に答える