Почему параметр не определен, если я могу сбросить его, и он имеет значение в Coldfusion?

Просто немного невежественно... используя Coldfusion8, если я записываю свою сессию в файл:

<cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session#">

Это включает:

accounttyp: whatever

Я получаю тот же результат, если я дам только этот параметр:

<cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session.accounttyp#">

Вопрос:
Если он определен и может быть выгружен, как получается проверка isDefined следующим образом:

<cfdump output="D:\ColdFusion8\logs\dump.txt" var="#IsDefined(Session.accounttyp)#"> 

оказывается НЕТ? Если это там, это должно быть определено, не так ли?

Спасибо за некоторые разъяснения.

2 ответа

Решение

<cfdump output="D:\ColdFusion8\logs\dump.txt" var="#IsDefined(Session.accounttyp)#">

Это потому, что синтаксис неверен. IsDefined ожидает имя переменной, т.е. строки. Опуская кавычки вокруг имени переменной, переменная сеанса вычисляется первой, а ее значение ("что угодно") - это то, что передается в IsDefined, Таким образом, код на самом деле проверяет переменную с именем "что угодно", а не "session.accounttyp", то есть:

    <cfif IsDefined("whatever")>

Вот почему результат NO, Это правильный синтаксис. (Обратите внимание на кавычки и отсутствие знаков фунта).

    <cfif IsDefined("Session.accounttyp")>

Тем не менее, я бы предложил перейти к structKeyExists, Как правило, предпочтительнее, чем IsDefined потому что это более точно.

Это возвращает логическое значение:

#IsDefined(Session.accounttyp)#

Итак, вы просите его вернуть да или нет.

Лучший тест может быть таким:

<cfif isDefined("Session.accounttyp")>
    <cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session.accounttyp#">
</cfif>
Другие вопросы по тегам