Могу ли я сохранить структуру в переменной сеанса Coldfusion? - PullRequest
1 голос
/ 10 августа 2011

Я передаю структуру в пользовательский тег CF.Мне бы хотелось, чтобы страница CFM, являющаяся этим пользовательским тегом, присваивала эту структуру динамически создаваемой переменной сеанса.Создание переменной сеанса работает при назначении ей простого значения, такого как число, но не удается при назначении ее структуре, как я делаю это ниже.

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

Я думал, что это возможно,но когда я пытаюсь это сделать, я получаю сообщение об ошибке: Сложные типы объектов не могут быть преобразованы в простые значения.

Так создается структура:

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

И пропущен через пользовательский тег:

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

Я думаю, что часть Evaluate все портит.

Ответы [ 4 ]

4 голосов
/ 12 августа 2011

Как говорит Ли, используйте запись массива вместо Evaluate (), чтобы создать переменную сеанса с динамическим именем:

<cfset SESSION[ "myVar" & ATTRIBUTES.count ] = ATTRIBUTES.myStruct>
2 голосов
/ 10 августа 2011

да, вы можете просто сделать следующее: примечание: здесь я использую cflock, чтобы избежать любых возможных условий гонки.

<cflock scope="session" throwontimeout="true" timeout="5" type="exclusive">
  <cfset session["myVar" & ATTRIBUTES.count] = attributes.myStruct />
</cflock>
2 голосов
/ 10 августа 2011

Да, вы можете,

Просто используйте метод дублирования

<cfset SESSION.myVar = duplicate(ATTRIBUTES.myStruct) />
1 голос
/ 11 августа 2011

Проблема выше - это оценка. Он пытается определить структуру как простое значение в строке, а затем вычислить строку.

Вы можете обойтись полностью. Причина в том, что вам нужна переменная сеанса с динамическим именем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...