是否可以在grails中编写自己的验证器,以返回有效对象?

就像是:

static constraints = { 
    name(validator: {val, obj -> 
        if (Drink.findByName(val)) return [Drink.findByName(val)] 
    }) 
} 

换句话说-如果饮料已经存在于数据库中,则当有人进行

新饮料(“可乐”)

并且可乐已经在数据库中

请您参考如下方法:

您无法使用自定义验证程序执行此操作。这不是真的是什么意思。从Grails Reference:

闭包可以返回:

  • null或true表示该值有效
  • false表示无效值,并使用默认消息代码
  • 一个字符串,指示要附加到“classname.propertName”的错误代码。用于解决错误消息的字符串。如果无法解决特定于字段的消息,则将解析错误代码本身,以允许出现全局错误消息。
  • 一个包含上述字符串的列表,然后包含任意数量的参数,可以用作从3开始索引的格式化消息参数。请参阅grails-app/i18n/message.properties以查看默认错误消息代码如何使用参数。

  • 一种替代方法是只创建一种服务方法,该服务方法是:1)查找域并返回它(如果存在); 2)否则,保存域并返回它。

    可能还有一个更优雅的选择。无论如何,Grails的约束机制不具备(也不应具有)这种能力。


    评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!