attribute.someParam не может быть оценен при холодном синтезе - PullRequest
0 голосов
/ 08 октября 2009

У меня в моем cfm что-то вроде этого

<CFModule name="MyModule"
    someParam_one="#something.one#"
    someParam_two="#something.two#"
    someParam_etc="etc_etc_etc"/>

И внутри моего модуля у меня есть

<CFSet param_name = "someParam_one">
...
evaluate("attributes." & param_name)

На большинстве наших серверов это работает. Но на одном из наших серверов я получаю

Ошибка разрешения параметра ATTRIBUTES.SOMEPARAM_NAME

Есть идеи, почему?

Спасибо

Ответы [ 4 ]

3 голосов
/ 08 октября 2009

Вы убедились, что someParam_one действительно создается? Я обнаружил, например, что если я сделаю что-то вроде этого:

<cfset foo = myObject.getSomething() />

и getSomething возвращает значение void или запускает функцию Java, которая ничего не возвращает, и CF будет ее подавлять. Переменная будет «определена», или, как кажется, приложение думает, но попытка доступа к ней приведет к ошибке. Поэтому сделайте следующее, чтобы отследить и уловить проблему:

  1. Дамп области ваших атрибутов, чтобы убедиться, что то, что вы хотите, действительно там.

  2. Запустите StructKeyExists (Attributes, param_name) перед попыткой доступа к переменной.

  3. Избавьтесь от оценки и используйте вместо нее атрибуты [param_name]

2 голосов
/ 19 октября 2009

Касательно вашего вопроса, но Evaluate() является злом и ненужным злом в этой ситуации. Вместо этого вы можете написать это, и оно будет более понятным, более безопасным и быстрым:

<cfset param_name = "someParam_one">
...
<cfset param_value = Attributes[param_name]>
1 голос
/ 21 октября 2009

Хорошо, мы сделали что-то действительно глупое: -)

У нас было развернуто два набора этих файлов, и один был обновлен, а другой нет, поэтому ошибка.

Спасибо за вашу помощь.

1 голос
/ 08 октября 2009

выстрел в темноте:

В CFMX есть ошибка, когда вы сделать CFMODULE вызов шаблона (или использовать пользовательский тег) из CFC и этот соблазн использует область CALLER для вернуть данные, данные никогда доступны для функции CFC. Это ошибка 51067, и это связано с Ошибка в переменной VARIABLES, 45138.

В комментариях пользователя в CFMX 6 документов на CFMODULE .

...