4

使用域或命令对象验证不能总是合理地检查错误,例如用户输入错误。

例如,在创建“忘记密码”功能时,如果用户输入数据库中不存在的用户名,我想显示一条足够的消息。所以控制器动作做这样的事情

...
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 中是否有类似的概念,但我还没有找到?

4

1 回答 1

13

flash只是一个地图,你可以在里面放任何你想要的东西——字符串、数字、对象等。它很方便,因为它只持续一个请求,所以它只会暂时污染会话。生成的 GSP 中的约定是使用message密钥,但这只是一个约定。

如果要存储另一条消息,请将其存储在不同的密钥中:

flash.warning = '...'

或者

flash.error = '...'

并像其他消息一样在 GSP 中检索它。

于 2012-09-03T15:59:43.480 回答