2017-01-27 1 views
0

Je suis en train de refactoriser une application XPages qui comporte cinq contrôles répétés imbriqués répétant essentiellement la même chose (un xp: panneau). J'ai pensé, aha, voici un contrôle personnalisé avec des propriétés! Je boucle mes contrôles de répétition autour des propriétés d'un bean géré, et j'espérais que j'aurais pu définir une propriété pour que le contrôle personnalisé accepte simplement le POJO que je lui envoie (puis y accéder avec EL dans le contrôle personnalisé).Passage d'un POJO à une propriété de contrôle personnalisée

Que dois-je faire? Faire que le contrôle personnalisé ne reçoive que des chaînes, des nombres, etc. et que toute la logique de contrôle imbriquée soit à l'extérieur? Ou y a-t-il un truc?

+1

Hmm qu'en est-il d'un HashMap au lieu d'un POJO entier? Mais: avec POJO et Map, vous pouvez accéder aux propriétés via les méthodes (par exemple, getValue() ou getMyAwesomePropertyValue()). La propriété CC doit cependant être de type java.lang.Object –

+2

Faites lui accepter un objet. Vous pouvez donc transmettre n'importe quel objet Java au contrôle personnalisé –

Répondre

2

Un contrôle personnalisé peut facilement accepter un objet java transmis via les propriétés personnalisées. Il suffit d'utiliser le type: java.lang.Object

1

Toutes les réponses étaient correctes, mais seul David l'a exprimé comme une réponse - merci à tous!

J'ai noté mon code ici pour n'importe qui plus tard: J'ai défini le noeud pour être de type java.lang.Object. Notez la syntaxe pour obtenir l'objet dans le contrôle personnalisé:

<xp:repeat 
    id="repeatfirstlevelnode" 
    value="#{TableOfContents.root.children}" 
    var="firstlevelnode"> 
    <xc:ccPanelNavigation 
     node="#{firstlevelnode}" 
     panelStyleWhenActive="panelLevel1 active bold" 
     panelStyleWhenInactive="panelLevel1" 
     NameNestedRepeatControl="repeatsecondlevelnodes"> 
    </xc:ccPanelNavigation> 

Et une fois que vous êtes dans le contrôle personnalisé, vous accédez à la propriété avec CompositeData.YourObject.

<xp:image 
      id="imgDummy" 
      url="/dummyEC.png" 
      styleClass="imageDummy"> 
      <xp:this.rendered><![CDATA[#{not compositeData.node.hasChildren}]]></xp:this.rendered> 
     </xp:image>