【发布时间】:2014-09-04 17:01:47
【问题描述】:
在我的应用程序中,我有很多如下代码:
def add(CreatePersonCommand command) {
if(command.hasErrors()) {
redirect(action: 'add')
return
}
}
我不喜欢这种重复,所以我想重构它。我希望 Grails 会有如下内容:
@Validate(action:'someAction')
def add(CreatePersonCommand command) {
}
或者
def add(@Valid CreatePersonCommand command) {
}
这将自动验证命令,并在出现错误时重定向到 GSP。我尝试使用拦截器和过滤器创建类似的东西,但失败了,因为我无法访问过滤器中的操作和命令。
也许我遗漏了一些东西,但有没有更好的方法来处理这个问题,或者实现类似上面的东西?
【问题讨论】:
-
不存在这样的功能。这将很容易实现。如果我要这样做,我会编写一个 AST 转换来完成它。所有当前的命令对象处理都是由 AST 转换强加的。
-
我之所以这么问,是因为我正在考虑我们可以在 Grails 核心中做哪些事情来改进这一点。如果命令对象有错误或其他选项,提供类似机制来指定要呈现的视图通常很有用。可能还为您提供一些机制来提供您自己的处理程序,该处理程序在命令对象出现错误时调用,您可以做任何您想做的事情。
-
我没有把它作为答案,因为它不是真正的答案,至少不是那种对 StackOverflow 有益的答案。我认为这个问题对 StackOverflow 也不是特别有用。它被设置为一个问题,但实际上只是开始讨论更适合 Grails 小组groups.google.com/d/forum/grails-dev-discuss 的可能性。
-
" 它应该在发生错误时重定向到一个视图。哪个 AST 转换现在可以解决这个问题?"目前没有 AST 转换可以解决这个问题。 Grails 中不存在此功能。
-
@JeffScottBrown - 我在 Githb 上创建了一个功能请求 github.com/grails/grails-core/issues/603