如何附加到CFPROPERTY中的结构集?

Mic*_*umo 4 coldfusion railo

我正在使用ColdFusion(Railo)中<cfproperty />的隐式gettersetter.

但是,对于更复杂的值,如结构和数组,我如何附加到这些值?

<cfproperty name="settings" type="struct" />
Run Code Online (Sandbox Code Playgroud)

如何将项目附加到名为settings的属性中?如果我执行以下操作:

<cfset setSettings(structAppend(getSettings(), { "hello" = "world" })) />
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

显示java.lang.NullPointerException

我在这里错过了什么吗?我是cfproperty标签的新手,并认为这会节省时间,但我无法弄清楚这一点.

另外,作为奖励我如何为这些复杂的数据类型设置默认值?

谢谢,Mikey

Nat*_*utz 5

在这里做几件事......

<cfset setSettings(structAppend(getSettings(), { "hello" = "world" })) />
Run Code Online (Sandbox Code Playgroud)

设置是一个structstructAppend()返回一个布尔值.你的结构是否在此行之前附加.其次,结构总是通过引用传递,这意味着,如果getSettings()你得到了一个struct,你可以对其进行更改.另一个调用getSettings()将返回相同struct的更新设置.

你需要的只是这个:

<cfset structAppend(getSettings(), { "hello" = "world" }) />
Run Code Online (Sandbox Code Playgroud)

最后一件事.您可能会获得空指针异常,因为getSettings()启动未初始化.在您的cfc中,在构造函数区域(在您的属性之后),您应该设置初始设置struct,如下所示:

<cfset setSettings({}) />
Run Code Online (Sandbox Code Playgroud)

  • 属性已声明但未初始化.如果在初始化之前运行getter,它将返回null(并将销毁你尝试将其设置为的任何变量),但在某些情况下,它被视为空字符串(`len(getSomeProperty())== 0`) .我使用bean工厂自动初始化`struct`和`array`属性. (2认同)