Ошибка Grails только на сервере Tomcat; не воспроизводится локально: ошибка при выполнении тега <g: link>: объект не является экземпляром объявления класса

У меня странная ошибка на живом сервере. Это происходит только по конкретному действию (поиску). Я не могу воспроизвести его локально (где я запускаю код, используя grails run-app), и я не могу воспроизвести его на тестовом сервере, который запускает Tomcat точно так же, как на рабочем сервере. Я скопировал производственную базу данных в локальную и до сих пор не могу воспроизвести ошибку. Единственные отличия в конфигурации - это то, что почта включена и некоторые другие мелочи, но ни один из них здесь не актуален.

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

Error 500: Error processing GroovyPageView: Error executing tag <g:link>: object is not an instance of declaring class at /WEB-INF/grails-app/views/dealer/list.gsp:41
Servlet: grails
URI: /grails/dealer/list.dispatch
Exception Message: object is not an instance of declaring class
Caused by: Error processing GroovyPageView: Error executing tag <g:link>: object is not an instance of declaring class at /WEB-INF/grails-app/views/dealer/list.gsp:41
Class: gsp_quotations_dealerlist_gsp
At Line: [72] 

.Gsp код в строке 41:

<g:each in="${dealerInstanceList}" status="i" var="dealerInstance">
<tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
  <td><g:link action="show" id="${dealerInstance.id}">${fieldValue(bean:dealerInstance, field:'name')}</g:link></td>
  <td><g:link action="show" id="${dealerInstance.id}">${fieldValue(bean:dealerInstance, field:'address')}</g:link></td>
  <td><g:link controller="quoteSettings" action="adminEdit" id="${dealerInstance.id}">${dealerInstance?.quoteSettings?.pricingTables?.size() > 0}</g:link></td>
</tr>
</g:each>

Строка 41 - это последний тег g:link.

Еще раз обратите внимание, что все это отлично работает локально и на тестовом сервере. Я полностью в тупике.

2 ответа

Ошибка "объект не является экземпляром объявления класса" обычно связана с проблемами среды. Проверьте свои версии JVM и Tomcat на сервере.

Попробуйте использовать ту же версию JVM для производства и разработки.

Как выглядит UrlMapping.groovy? ты изменил это? также попробуйте использовать <g:createLink ...> тег вместо <g:link> и поиграйте с "абсолютным" параметром: http://grails.org/doc/1.0.x/ref/Tags/createLink.html

Другие вопросы по тегам