Я использую Grails 2.3.11.Grails render blank page
Когда я собираюсь localhost:8080/myapp/questionnaire/show/3
, приложение показывает пустую страницу. И отладка даже не войдет в один из методов ниже.
class QuestionnaireController {
def beforeInterceptor = [action: this.&loadQuestionnaire, only: ['show']]
Questionnaire questionnaireInstance
def show = {
render(view: 'show', model: [questionnaire: questionnaireInstance])
}
private def loadQuestionnaire() {
questionnaireInstance = Questionnaire.findById(params.id)
if(!questionnaireInstance) {
redirectWhenNotFound(params.id)
}
}
private def redirectWhenNotFound(def id) {
flash.message = message(code: 'default.not.found.message', args: [
message(code: 'questionnaire.label'),
id
])
redirect(uri: "/")
}
Однако, когда я пытаюсь localhost:8080/myapp/questionnaire/show
, он идет к loadQuestionnaire()
, очевидно, не может найти экземпляр домена, из-за params.id
не существует, поэтому он идет к redirectWhenNotFound()
и перенаправляет его правильно на главную страницу.
Вопрос: почему он не работает нормально?
Edit:
Он показывает пустую страницу только тогда, когда есть экземпляр с заданным идентификатором, когда нет, он переходит в метод.
В конце концов я нашел решение, которое находится в ответе ниже.
Вы пробовали без 'beforeInterceptor' и без' questionnaireInstance'? Похоже, что это можно было бы сделать более простым способом, и удерживание переменных экземпляра в контроллере обычно не является хорошей идеей. – tylerwal
@tylerwal Этот проект имеет очень похожий пример, разница перенаправляется с помощью 'action' в том же контроллере, а не' uri'. И если вы скажете, что это не очень хорошая идея, было бы хорошо оправдать это мнение. Это может быть не самая лучшая идея, но она позволяет упростить код и не повторять те же шаги во многих методах. DRY. –
Мой первоначальный комментарий был сделан в отношении того, что контроллеры были бы проблемой с одноточечным и проблемным параллелизмом, но после того, как они просмотрели его, они на самом деле запрошены, и проблема не такая большая. Я все еще думаю, что этот код можно сконденсировать и записать более простым способом без перехватчика. – tylerwal