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

У меня странная ошибка на живом сервере. Это происходит только по конкретному действию (поиску). Я не могу воспроизвести его локально (где я запускаю код, используя 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 ]

0 голосов
/ 19 июня 2013

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

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

0 голосов
/ 24 марта 2011

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

...