Grails «ответить» отображает неправильное представление при запуске из файла .war
Приложение Grails имеет много автоматически сгенерированного (из стандартных скаффолдингов Grails 2.3.0) кода с использованием нового RESTful "реагировать" особенность. Например, методы индекса обычно выглядят так:
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond Alpha.list(params), model:[alphaInstanceCount: Alpha.count()]
}
Это работает совершенно нормально, когда приложение запускается как "Grails Run-App " однако происходит сбой, когда приложение упаковано как .war и запускается таким образом внутри не встроенного контейнера сервлета.
Это работает для первой используемой комбинации контроллер / представление, но для последующих использует папку представления первого представленного представления. Например, если мы попробуем/alpha/index
сначала, а потом потом/beta/index
тогда/alpha/index
будет работать нормально, но/beta/index
буду использовать/alpha/index.gsp
для рендеринга (вместо ожидаемого/beta/index.gsp
).
Однако, если я изменю метод на:
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
render(view: 'index', model:[alphaInstanceList: Alpha.list(params), alphaInstanceCount: Alpha.count()])
}
тогда он отлично работает в обоих вариантах развертывания.
Я добавил отладочный код в некоторые из .gsp-s для вывода,${this.getGroovyPageFileName()}
${controllerName}
а также .${actionName}
Это показывает, что, хотя имена контроллера и действия всегда являются ожидаемыми, представление, используемое для представлений, отображаемых после первого, остается представлением, использованным для первого.
Например, начальный вызов для/alpha/index
имеет контроллер какalpha
, действие какindex
и рассматривать как/WEB-INF/grails-app/views/alpha/index.gsp
, Тем не менеепоследующий вызов из/beta/index
имеет контроллер какbeta
, Посмотреть, какindex
, но рассматривать как (/WEB-INF/grails-app/views/alpha/index.gsp
заметьте неправильноальфа" Вот). Последующие призывыalpha
оставайся в порядке.
Если бы мы начали с беты, а потом перешли на альфу, все было бы наоборот (beta
Это хорошо,alpha
сломано).
Я попытался запустить его под JPDA, но, хотя моя IDE, похоже, подключается, он фактически не достигает точек останова (возможно, это не связано с этой проблемой).
м с использованием Grails 2.3.0, JDK 1.6 и Tomcat7.
Там нет ничего плохого, что я могу видеть в журналах.
Любые идеи, в чем может быть проблема, или даже просто, как подойти к ее устранению?
http://goo.gl/aFKYYb <- приложение Grails
http://goo.gl/aDP6Lx <файл .war