2011-08-10 94 views
1

我正在向CF定製標記傳遞一個結構。我想要這個自定義標籤的CFM頁面將這個結構賦值給一個動態創建的會話變量。創建會話變量時,將其分配給一個簡單的值(如數字)時工作正常,但以下面的方式將其分配給結構時會失敗。我可以在Coldfusion會話變量中存儲結構嗎?

<cfset Evaluate("SESSION.myVar#ATTRIBUTES.count# = #ATTRIBUTES.myStruct#")> 

我認爲這是可能的,但是當我嘗試這樣做,我得到一個錯誤: 複雜的對象類型不能轉換爲簡單的值。

這是怎樣的結構創建:

<cfset testStruct = StructNew()> 
<cfset testStruct.something = 2> 

並通過自定義標籤傳遞:

<cf_myTag myStruct="#testStruct#" count="#i#"> 

我認爲評估部分被搞亂這裏的東西了。

+0

你能告訴我們更多的代碼?也許你在哪裏創建/設置Struct,以及將它傳遞給Custom Tag的位置。您如何執行代碼可能存在問題。 –

+4

您確定從該cfset行引發錯誤嗎?可以在Session範圍中存儲結構 – Henry

回答

4

正如雷說,使用數組符號,而不是評估()來創建動態命名會話變量:

<cfset SESSION[ "myVar" & ATTRIBUTES.count ] = ATTRIBUTES.myStruct> 
2

是的,你可以,

只需使用重複的方法

<cfset SESSION.myVar = duplicate(ATTRIBUTES.myStruct) /> 
+2

爲什麼他需要使用duplicateated()? –

+0

這裏的問題是會話變量名稱需要是動態的:myVarN不只是myVar。 – CfSimplicity

2

是的,你可以做到以下幾點: 注意到我使用一個CFLOCK這裏,以避免任何潛在的競爭條件。

<cflock scope="session" throwontimeout="true" timeout="5" type="exclusive"> 
    <cfset session["myVar" & ATTRIBUTES.count] = attributes.myStruct /> 
</cflock> 
1

上面的問題是評估聲明。它試圖將結構作爲字符串中的一個簡單值進行蒸發,然後評估字符串。

您可以完全避開。原因是你想要一個動態命名的會話變量?

+0

是的,我將Evaluate用於動態命名的會話變量。這是我知道這樣做的唯一途徑。你知道我可以如何構造這個來處理結構分配嗎? – dtone

+1

使用關聯數組表示法。請參閱http://help.adobe.com/zh_CN/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7fb2.html和http://help.adobe.com/zh_CN/ColdFusion/9.0/Developing/WSf01dbd23413dda0e-2a6ba8891200fcc8c06-7ffd.html 。 – Leigh

相關問題