2012-08-07 80 views
0

我使用推土機來執行對象映射。一切工作都很好,只是我無法映射這個特定的東西。推土機:將字段映射到函數輸出

<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; 
} 
+0

讓我們看看你的類是什麼樣的。 – davidmontoyago 2012-08-07 14:12:51

+0

剛剛編輯帖子以顯示課程。這是不詳細,否則它會太長.. – Afaque 2012-08-07 14:50:56

回答

0

當你這樣做:

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

推土機將嘗試訪問rights數組的第一個位置,並調用getter是否長度財產上的UARightBean實例(這是數組的類型),顯然長度屬性不存在於UARightBean而推土機會拋出異常。

我建議創建UAUserBean getter方法返回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[]到的自定義轉換器,但它看起來很醜。

+0

我沒有修改UAUserBean的權利.. 我已經實施使用自定義轉換器...但它的真實其醜陋.. 我是隻是想知道權利是否是一個集合。是否可以調用size()函數將其映射到User類中的字段。 – Afaque 2012-08-07 16:13:57

+0

您將遇到與List字段相同的問題。 – davidmontoyago 2012-08-07 17:06:07