【发布时间】:2012-08-28 08:57:18
【问题描述】:
错误,例如使用域或命令对象验证无法始终合理地检查错误的用户输入。
例如创建“忘记密码”功能时,如果用户输入数据库中不存在的用户名,我想显示足够的消息。所以控制器动作会做这样的事情
...
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中是否有类似的概念,我只是还没有找到?
【问题讨论】:
-
对于那些对我在 Burt beckwith 和 Ian Robers 的输入基础上构建的最终解决方案感兴趣的人:不幸的是,我不允许发布源代码,但总的来说我只是创建了一个 TagLib两个成员:#1 向闪存范围写入添加消息,例如
myproject.message(error:'User does not exist')或myproject.message(success:'Password changed') -
根据类型(错误/成功/警告/信息),将所有消息添加到
flash中四个列表之一中的两个。成员 #2 是显示消息的实际标签,将所有消息呈现到页面中。它还检索 flash.message 和 bean 错误。希望这会有所帮助
标签: grails view error-handling controller