升级后 Grails 验证不起作用

Posted

技术标签:

【中文标题】升级后 Grails 验证不起作用【英文标题】:Grails Validation Not Working After Upgrade 【发布时间】:2012-05-26 00:46:59 【问题描述】:

我正在将我的 Grails 1.3.7 应用程序升级到 2.0.3,并且我已经修复了大部分问题。但是,我有用于创建用户并将其保存到数据库的代码。该代码不应通过验证,因为我正在重用已使用的用户名并且用户名存在唯一约束。 .validate() 返回 true,但是当使用 mysql 唯一约束错误调用 user.save() 时,代码实际上会爆炸。

应该抛出一个错误:

def submitSignup = 
        def user = new User(params)

        user.validate()
        if (!user.hasErrors()) 
            ...
            // This line bombs with the MySql unique constraint I would have expected .validate() to get
            user.save()
        

在 User.groovy 中:

static constraints = 
    username(blank: false, unique: true);
    ...

有什么想法吗?

编辑:我也在从 Acegi 升级到 Spring Security 插件。我认为这无关紧要,但我想我会提到它。

我在https://github.com/skazzaks/Grails-Unique-Test 上贴了一个遇到问题的示例,这使它看起来像一个错误。

【问题讨论】:

这是您在测试中失败的原因还是您是如何遇到此问题的?我设置了一个简单的单元测试,并且唯一约束对我来说正常工作。 @JarredOlson 当我运行应用程序并尝试提交新用户(已使用用户名)时,这失败了。这在我生产的 1.3.7 版本上正常工作。我不确定如何解释这种差异。 在运行时将唯一约束添加到 Grails 应用程序后,我遇到了一些相关的验证问题。 validate() 没有抱怨不唯一的值。它有助于清理、手动删除目标目录并进行编译。 【参考方案1】:

几天前,我在从 1.3.7 升级到 2.0.3 时遇到了类似的奇怪验证问题。

对我有用的是手动清除我的目标目录。显然,重新编译所有类使应用程序重回正轨。

虽然不知道它是否适用于您的情况,但可能值得一试。

【讨论】:

在运行时将唯一约束添加到 Grails 应用程序后,我遇到了一些相关的验证问题。 validate() 没有抱怨不唯一的值。它有助于清理、手动删除目标目录并进行编译。【参考方案2】:

我认为这是一个错误,因为我的域类位于 src/groovy 中。

【讨论】:

以上是关于升级后 Grails 验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将 jquery 版本从 2.1 升级到 3 后,淘汰验证自定义规则不起作用

Spring安全导入在grails 2.4.4下不起作用

Grails、Vaadin 7 和 SpringSecurity:授权不起作用

Grails 发送邮件不起作用

grails中的列类型不起作用

Grails 3.1.1 - 当模型类扩展另一个groovy类时,脏检查不起作用