2012-08-07 3 views
0

J'utilise Dozer pour mapper des objets. Tout fonctionne bien, juste que je ne suis pas capable de cartographier cette chose particulière.Bulldozer: Mapper un champ à la sortie de fonction

<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 

ce que je veux faire est

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

Toutes les suggestions ??

Merci d'avance.


User{ 
protected RightLst rightLst; 
} 

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

public class UAUserBean{ 
private UARightBean[] rights; 
} 
+0

Voyons à quoi ressemblent vos cours. – davidmontoyago

+0

Juste édité le post pour montrer les classes. Ce n'est pas dans le détail, car sinon il serait trop long .. – Afaque

Répondre

0

Lorsque vous faites ceci:

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

Dozer tentera d'accéder à la première position du tableau rights et appeler le getter pour la longueur propriété sur une instance de UARightBean (qui est le type du tableau), évidemment la propriété longueur n'existe pas dans UARightBean et Dozer lancera une exception.

Je propose de créer un getter dans UAUserBean pour retourner la longueur de la propriété rights, il ressemblerait à ceci:

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

fichier de mappage:

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

Si vous le pouvez 't modifier UAUserBean, votre dernière option serait un convertisseur de UARightBean[] à Integer, mais ça aurait l'air moche.

+0

Je n'ai pas le droit de modifier UAUserBean .. J'ai déjà mis en œuvre en utilisant des convertisseurs personnalisés ... mais c'est vrai son moche .. j'étais Je me demandais juste si les droits étaient une collection. Serait-il possible d'appeler sa fonction size() pour la mapper au champ de la classe User? – Afaque

+0

Vous rencontrerez le même problème avec un champ Liste. – davidmontoyago

Questions connexes