我正在使用Grails 2.3.11。
当我要去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()
并将其正确地重定向到主页面。
问题是 - 为什么它不能正常工作?
修改:
仅当存在具有给定id的实例时才显示空白页面,如果没有,则进入该方法。
最终我找到了解决方案,在下面的答案中。
答案 0 :(得分:0)
在检查了更多的东西之后,只有在存在具有给定id的实例时才会失败,并且当没有具有给定id的实例时它会通过该方法,结果出现拼写错误在questionnaire
表中的列,在编辑之后,Grails更新了架构而没有删除旧架构。
可能这是问题所在,因为我删除了该列,删除了所有行,重新启动了应用程序,创建了一个新实例,现在可以正常运行。
问题是它失败了,所以我将这个答案留给任何可能在将来遇到同样问题的人。