在有些情况下,需要对一些非域类对象进行数据绑定,例如对控制器的本地属性进行数据绑定。为了处理这个问题Grails提供了bindData方法,该方法使用一个待绑定数据的对象及一个java.util.Map类型的对象作为参数。这个映射集合中应该包含一些与传入对象的目标属性名相匹配的键(Key)。为了演示,我们将dataCreated和url参数绑定到控制器属性上,而不是域对象属性。清单7-15中的代码将闭包的拥有者(Owner,本例中即BookmarkController 实例)及params对象作为bindData方法的参数,然后参数在进行自动类型转换后再赋值给BookmarkController类的dateCreated和url属性。
清单7-15 使用bindData方法
class BookmarkController {Date dateCreatedURL urldef bindAction = {bindData(owner, params)assert url == new java.net.URL('http://grails.org')}}
在清单7-14中,我们使用if/else语句块来执行验证,但是没有提供当验证成功或失败时相应处理的实现细节。常见的处理验证失败的方法是将控制重定向到另外一个操作或控制器。在7.6节中,我们将研究如何控制应用程序的流程及在必要的时候如何执行重定向。