首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails验证器不检测违规

Grails验证器不检测违规
EN

Stack Overflow用户
提问于 2016-03-01 05:04:22
回答 1查看 42关注 0票数 0

给定一个简单的域类,具有开始小时和结束小时,其中结束小时应始终大于开始小时的值:

代码语言:javascript
复制
    class Daypart {
         ...
         Integer startHour
         Integer endHour

         static constraints = {
             ...

             startHour inList: (0..23)
             endHour  inList: (0..23), validator: { val, obj ->
                 return (val > obj.startHour)
             } 
          }
    }

使用20作为开始时间,使用4作为结束时间时,验证将失败。在调用save()操作的全新实例上,验证按预期工作。

编辑现有实例并调用update()时,验证规则将被忽略,.validate()返回true,即使将开始时间设置为-32 (具有简单约束的属性,甚至不是自定义验证例程)。在update块中调用.validate()之前,我已经确保.clearErrors()无用。你知道这是怎么回事吗?

编辑:添加更新块

代码语言:javascript
复制
    def update(Daypart dc) {

      dc.clearErrors()
      dc.validate()
      println ("Got errors? ${dc.hasErrors()}")

      try {

          if (dc.hasErrors()) {
              flash.error ="Invalid parameters."
              redirect resource: "campaign/daypart", action: "edit", id: dc.id, campaignId: dc.campaign.id
              return
          }

          dc.save(flush: true)
          flash.success = "Updated campaign ${dc.campaign.id}."
          redirect(controller: 'campaign', action: 'index')

      }

      catch (DaypartException de) {
          flash.message = de.message
          redirect resource: "campaign/daypart", action: "edit", id: de.daypart.id, campaignId: de.daypart.campaign.id
      }
  }

}

EN

回答 1

Stack Overflow用户

发布于 2016-03-01 06:18:13

删除dc.clearErrors(),这将从Daypart实例中删除所有验证错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35709616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档