我正在将结构传递给CF自定义标记。我希望这个自定义标记的CFM页面将此结构分配给动态创建的会话变量。创建会话变量时会将其分配给一个简单的值(如数字),但在按照我在下面的方式将其分配给结构时会失败。
<cfset Evaluate("SESSION.myVar#ATTRIBUTES.count# = #ATTRIBUTES.myStruct#")>
我认为这是可能的,但是当我尝试这样做时,我收到一个错误: 无法将复杂对象类型转换为简单值。
这是结构的创建方式:
<cfset testStruct = StructNew()>
<cfset testStruct.something = 2>
并通过自定义标记:
<cf_myTag myStruct="#testStruct#" count="#i#">
我认为评估部分在这里弄乱了。
答案 0 :(得分:4)
正如Leigh所说,使用数组表示法而不是Evaluate()来创建动态命名的会话变量:
<cfset SESSION[ "myVar" & ATTRIBUTES.count ] = ATTRIBUTES.myStruct>
答案 1 :(得分:2)
是的,你可以,
只需使用复制方法
即可<cfset SESSION.myVar = duplicate(ATTRIBUTES.myStruct) />
答案 2 :(得分:2)
<cflock scope="session" throwontimeout="true" timeout="5" type="exclusive">
<cfset session["myVar" & ATTRIBUTES.count] = attributes.myStruct />
</cflock>
答案 3 :(得分:1)
以上问题是评估声明。它试图将结构作为字符串中的简单值进行评估,然后评估字符串。
你可以完全放心。原因是你想要一个动态命名的会话变量吗?