Странная ошибка холодного синтеза: "0" - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть страница с кодом, который повторяется несколько раз. Я разложил код в файл шаблона и включил файл шаблона, чтобы избежать повторения. Тем не менее, я получаю самую странную ошибку - обычная ошибка отладки Coldfusion появляется с «Следующая информация предназначена для разработчика веб-сайта для целей отладки». и "Произошла ошибка при обработке запроса" ... Но в разделе, в котором обычно есть сообщение об ошибке, просто написано "0". (Если я загляну в раздел трассировки стека, то увижу «java.lang.ArrayIndexOutOfBoundsException: 0» ...) Что это значит?

Кроме того факта, что я никогда не видел подобную ошибку холодного синтеза и не понимаю, к чему она относится, я удивлен, что сначала получаю ошибку. Страница работала, я скопировал код точно в другой файл и включил его, используя «cfinclude» ... И если я скопирую код обратно, он работает просто отлично. Я думал, что cfinclude просто вставляет код в файле прямо на страницу - как я могу получить ошибку с cfinclude, которую я не получаю с буквальным кодом? Чего мне не хватает в работе cfinclude?

Обновление : похоже, проблема с вложенным cfoutput. У меня есть что-то вроде:

<cfoutput group="myGroup">
   <cfoutput group="myNestedGroup">
      ... lots of code ...
   </cfoutput>
</cfoutput>

Это то, что выдает ошибку. Есть идеи почему?

Обновление 2:

Это похоже на ошибку Coldfusion. Кто-нибудь может подумать об обходном пути?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Это может быть чем-то действительно очевидным, поэтому мои извинения, но cfouput также должен включать query = "" .

Я обычно получаю ArrayIndexOutOfBoundsException при использовании массива или структуры, когда значение ключа на самом деле не существует, т.е. anexample [keyValue] .data1 . Я бы посоветовал рассматривать данные, которые вы извлекаете, в качестве первого порта вызова, либо вручную, либо вставив ctry / cfcatch , чтобы сузить строку, которая может быть причиной этого.

0 голосов
/ 21 сентября 2011

Если ваша проблема в том, что вы не можете сделать cfinclude в середине набора вложенных, сгруппированных тегов cfoutput, у вас есть два варианта (кроме как оставить рабочий код в покое) ...

Один из них - написать функцию, которая принимает запрос в качестве аргумента и выполняет весь набор операторов cfoutput и т. Д.

Другой - объявить некоторые локальные переменные, которые содержат биты запроса, которые нужны вашему включению.перед включением - включаемые имеют доступ к той же области видимости переменных, что и включающая страница.Если подумать, похоже, вы не используете явные ссылки на переменные запроса, что само по себе может быть решением.Поэтому вместо: #foo# используйте: #variables.queryname.foo#.

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