2010-07-23 19 views
2

Je ne peux pas comprendre pourquoi cela ne fonctionne pas:Visualforce: passer un paramètre à un composant personnalisé dans un répéteur

<apex:repeat value="{!MyContacts}" var="c" > 
    <c:ContactRowComponent contactLastName="{!c.LastName}"/> 
</apex:repeat> 

(où sur le contrôleur principal MyContacts retourne un tableau d'objets de contact, et sur le composant contactLastName est défini comme un attribut String)

Cela me donne l'erreur:

Literal value is required for attribute contactLastName in <c:ContactRowComponent> at line 25 column 27

Il semble dire que une valeur littérale est nécessaire et pas une formule? Est ce que j'essaie de faire impossible, ou est-ce que je le fais mal?

+0

Devrait être ok :(Est-ce que myContacts vraiment array (Contact []) ou autre chose? Devrait être un tableau Aussi - stupide mais êtes-vous sûr de ne pas déclarer la variable "c" comme quelque chose d'autre auparavant? Assurez-vous de faire une requête pour le "LastName"? Que se passe-t-il si vous commentez le composant et affichez simplement le champ de fusion {! c.LastName}? – eyescream

Répondre

2

J'ai également rencontré ce problème. Dans mon cas, c'est parce que j'ai spécifié l'attribut par défaut dans l'attribut component que vous ne pouvez pas faire sur les champs qui utilisent une formule pour une raison quelconque.

Par exemple cela produira l'erreur que vous avez décrit lors du passage d'une valeur de formule:

<apex:attribute type="string" name="value" default="sometext" description="some name value" /> 

Donc, si vous supprimez l'attribut par défaut l'erreur sera résolu. Faites-moi savoir si cela résout pour votre cas d'utilisation particulier.