2017-10-18 4 views
1

J'essaie quelque chose de nouveau. Je veux passer un arraylist avec des objets json via la définition de propriété dans un contrôle personnalisé. la propriété que j'ai appelée cols et est de type objet.comment accéder à un arraylist avec des objets json dans un contrôle de répétition

Sur un XPage j'ai calculé la valeur de la propriété maintenant comme suit:

<xc:this.cols><![CDATA[#{javascript:var cols = []; 

cols.push({ 
     "colName" : "Petter", 
     "colValue" : "Developer" 
    }); 
cols.push({ 
     "colName" : "Jesper", 
     "colValue" : "Administrator" 
    }); 
return cols;}]]></xc:this.cols> 

Maintenant, dans mon répéteur Je veux utiliser ces objets/valeurs. Mais je ne suis pas sûr de comment?

D'abord, j'essayé en dehors de mon contrôle de répéter comment y accéder en JavaScript .: par exemple

<xp:text escape="true" id="computedField1"> 
      <xp:this.value><![CDATA[#{javascript:var cols = compositeData.cols; 

cols[0]["colValue"]}]]></xp:this.value> 
     </xp:text> 
     <xp:text escape="true" id="computedField3"> 
      <xp:this.value><![CDATA[#{javascript:var cols = compositeData.cols; 

cols[1]["colValue"]}]]></xp:this.value> 
     </xp:text> 

Cela semble fonctionner parce que je reçois les valeurs développeur et administrateur retourné.

Maintenant je veux accéder au json dans mon contrôle de répétition mais je me perds ici.

Voici comment je l'ai mis en place mon contrôle de répétition:

<xp:repeat id="repeat1" rows="30" var="colObj" indexVar="idx" 
      value="#{javascript:compositeData.cols}"> 

Je l'ai placé une commande de texte calculé dans mon contrôle de répétition et d'essayer quelque chose de similaire:

<xp:text escape="true" id="computedField2"> 
       <xp:this.value><![CDATA[#{javascript:colObj[idx]["colValue"]}]]></xp:this.value> 
      </xp:text> 

Mais je reçois une erreur:

com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue (JavaScriptValueBinding.java:132)

Quelqu'un peut-il expliquer ce que j'ai fait de mal et comment je devrais le faire correctement?

Répondre

2

Essayez de changer ceci:

<xp:text escape="true" id="computedField2"> 
    <xp:this.value><![CDATA[#{javascript:colObj[idx]["colValue"]}]]>  
    </xp:this.value> 
</xp:text> 

à ceci:

<xp:text escape="true" id="computedField2"> 
    <xp:this.value><![CDATA[#{javascript:colObj["colValue"]}]]> 
    </xp:this.value> 
</xp:text> 

Vous alreadyb ont le colObj donc, pas besoin d'obtenir le sous-ensemble. Le contrôle de répétition s'occupe de l'idx donc, colObj dans la répétition est le même que colObj[n] en dehors de la répétition.

+0

Bonjour Rob. l'index est fourni pour moi en effet. Je vous remercie! – Malin