【发布时间】:2010-12-15 09:45:20
【问题描述】:
我按照这里的说明进行操作: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”)。它总是返回 false,即使名称大于 25。
这是一个 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>
UPDATE 2:当我不使用单元测试,但尝试在控制器中调用 hasErrors 时,它运行但返回 false价值。 (hasErrors 使用 Warm('Hihi', 3) 返回 false)。有人知道吗?
更新 3:我遵循 Victor 的方式,现在如果我在 hasErrors() 之前调用 validate(),问题就解决了。但是我还是不明白,为什么“grails generate-all”控制器在使用hasErrors()之前不必调用validate()?
【问题讨论】:
-
你之前有没有调用 validate() ?我们可以有完整的动作代码吗?
-
还有User类的属性。
-
我只是调用 hasErrors() 函数,而不是 validate()。是的,我会尽快更新问题。
-
@Stefan Armbruster:我已经更新了函数。请看一看。