Почему параметр не определен, если я могу сбросить его, и он имеет значение в 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>