2011-08-10 27 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

あなたは私たちに多くのコードを示してもらえますか?おそらく、構造体を作成/設定する場所と、カスタムタグに渡す場所です。コードの実行方法に問題がある可能性があります。 –

+4

そのcfset行からエラーがスローされていますか?構造体をセッションスコープに格納することは可能です – Henry

答えて

4

リーが言うように、配列表記を使用するのではなく評価():

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

はいあなたは、

ただ、そう、あなただけの次の操作を行うことができ、重複する方法

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

なぜduplicated()を使用する必要がありますか? –

+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/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7fb2.htmlおよびhttp://help.adobe.com/jp/ColdFusion/9.0/Developing/WSf01dbd23413dda0e-2a6ba8891200fcc8c06-7ffd.htmlを参照してください。 。 – Leigh

関連する問題