Ошибка 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