gpt4 book ai didi

grails - 可验证的Grails不适用于非持久域类

转载 作者:行者123 更新时间:2023-12-02 14:18:21 25 4
gpt4 key购买 nike

我在这里按照说明进行操作:http://www.grails.org/doc/latest/guide/7.%20Validation.html

并添加到 config.groovy 中:

grails.validateable.classes = [liningtest.Warm']

然后添加到 src / groovy / Warm.groovy (这是一个非持久性的域类):
package liningtest

import org.codehaus.groovy.grails.validation.Validateable


class Warm {
String name;
int happyCite;

Warm(String n, int h) {
this.name = n;
this.happyCite = h;
}

static constraints = {
name(size: 1..50)
happyCite(min: 100)
}
}

但这对于“hasErrors”函数不起作用(“空白错误”和“大小:0..25”)。即使名称> 25,也始终返回false。

这是Grails的错误吗(如果是),是否有任何解决方法?

我正在使用Grails 1.3.3

更新:我已经更新了简化代码。现在,我知道约束“大小”不能与“空白”一起使用,但仍然无法使用。

我在 test / unit / liningtest / WarmTests.groovy 中的测试类
package liningtest

import grails.test.*

class WarmTests extends GrailsUnitTestCase {
protected void setUp() {
super.setUp()
}

protected void tearDown() {
super.tearDown()
}

void testSomething() {
def w = new Warm('Hihi', 3)
assert (w.happyCite == 3)

assert (w.hasErrors() == true)
}
}

我得到的错误是:
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="1" failures="0" hostname="evolus-50b0002c" name="liningtest.WarmTests" tests="1" time="0.062" timestamp="2010-12-16T04:07:47">
<properties />
<testcase classname="liningtest.WarmTests" name="testSomething" time="0.062">
<error message="No signature of method: liningtest.Warm.hasErrors() is applicable for argument types: () values: []
Possible solutions: hashCode()" type="groovy.lang.MissingMethodException">groovy.lang.MissingMethodException: No signature of method: liningtest.Warm.hasErrors() is applicable for argument types: () values: []
Possible solutions: hashCode()
at liningtest.WarmTests.testSomething(WarmTests.groovy:18)
</error>
</testcase>
<system-out><![CDATA[--Output from testSomething--
]]></system-out>
<system-err><![CDATA[--Output from testSomething--
]]></system-err>
</testsuite>

更新2 :当我不使用单元测试,而是尝试在 Controller 中调用 hasErrors 时,它将运行,但返回错误值。 (hasErrors通过Warm('Hihi',3)返回false)。有人知道吗?

更新3 :我遵循Victor的方法,现在如果在hasErrors()之前调用validate()可以解决问题。但是我还是不明白,为什么“grails generate-all” Controller 在使用hasErrors()之前不必调用validate()?

最佳答案

实际上是,需要先调用validate()-这将触发验证并更改对象状态。查看ValidationGrailsPlugin.addValidationMethods(),我发现hasErrors()是只读方法。

调用validate()之后,您的示例对我有用。我在grails console中尝试过(很棒的工具,我强烈推荐!):

Warm w = new Warm('')
w.hasErrors() // 'Result: false'
w.validate()
w.hasErrors() // 'Result: true'

我将 @Validateable添加到Warm类。我相信这没有关系。

关于grails - 可验证的Grails不适用于非持久域类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com