2013-05-09 3 views
4

J'utilise <cfproperty /> pour utiliser getters et setters dans ColdFusion (Railo).Comment puis-je ajouter à un ensemble struct dans CFPROPERTY?

Cependant, pour les valeurs plus complexes comme les structures et les réseaux, comment puis-je les ajouter?

<cfproperty name="settings" type="struct" /> 

Comment puis-je ajouter un élément dans la propriété appelée paramètres? Si je fais ce qui suit:

<cfset setSettings(structAppend(getSettings(), { "hello" = "world" })) /> 

Je reçois l'erreur suivante:

java.lang.NullPointerException

Suis-je manque quelque chose ici? Je suis nouveau sur le tag cfproperty et je pensais que ce serait un gain de temps, mais je ne peux pas comprendre cela.

En bonus, comment définir une valeur par défaut pour ces types de données complexes?

Merci, Mikey

Répondre

5

couple de choses ici ...

<cfset setSettings(structAppend(getSettings(), { "hello" = "world" })) /> 

Settings est un struct mais structAppend() retourne un booléen. Faites votre structure en ajoutant avant cette ligne. Deuxièmement, les structures sont toujours transmises par référence, ce qui signifie que si vous faites getSettings(), vous obtenez un struct, que vous pouvez modifier. Un autre appel à getSettings() retournera le même struct avec les paramètres mis à jour.

Tout ce que vous avez besoin est ceci:

<cfset structAppend(getSettings(), { "hello" = "world" }) /> 

Une dernière chose. Vous pourriez obtenir une exception de pointeur null car getSettings() commence non initialisé. Dans votre cfc, dans la zone du constructeur (après vos propriétés), vous devez définir une configuration initiale struct, comme ceci:

<cfset setSettings({}) /> 
+0

Il semble que votre dernier point résolu la question. Je ne savais pas que je devais explicitement définir() le type comme ça. Je suppose que l'attribut type gérera cela. Merci! –

+2

Les propriétés sont déclarées mais non initialisées. Si vous lancez le getter avant de l'initialiser, il renvoie un null (et détruira toute variable que vous essayez de lui donner), mais dans certains cas, il est traité comme une chaîne vide ('len (getSomeProperty()) == 0') . J'utilise une fabrique de haricots pour initialiser automatiquement les propriétés 'struct' et' array'. – imthepitts

Questions connexes