使用域或命令对象验证不能总是合理地检查错误,例如用户输入错误。
例如,在创建“忘记密码”功能时,如果用户输入数据库中不存在的用户名,我想显示一条足够的消息。所以控制器动作做这样的事情
...
def user = User.find{name==uname}
if(!user) {
// user not found in db, output error and render view again
render view: 'forgotPassword'
return
}
// do reset password stuff
...
我应该怎么做才能在<g:hasErros>
标签内的视图中显示错误?
flash.message
(因为生成的控制器/视图这样做)对我来说似乎不正确,因为我不仅显示信息消息,而且显示错误消息。这就是为什么我认为该消息应该由<g:hasErros>
标签处理并像域验证错误一样显示。(对用户来说,这是相同的反馈级别:“由于输入错误而无法工作”。
创建@Validateable
命令对象似乎也不对。恕我直言,根据数据库检查值实际上不是命令对象中验证的责任吗?或者是吗?然后它对我来说似乎有点太复杂了。
那么最好的方法是什么?其他框架(例如 Wicket)提供了不同的方法error(String msg)
,例如info(String msg)
允许轻松处理视图中的反馈消息。Grails 中是否有类似的概念,但我还没有找到?