代码之家  ›  专栏  ›  技术社区  ›  Fabien Barbier

多域关联的Grails验证问题?

  •  0
  • Fabien Barbier  · 技术社区  · 14 年前

    我需要验证3个域之间的保存操作,这里是关系:

    用户-作业流程:一对多,作业流程-热处理:一对多。

    User { static hasMany = [ jobs : JobProcess ] ... }
    JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
    Heatmap { static belongsTo = JobProcess ... JobProcess job ... }
    

    我使用异常来控制验证流,这是我的验证类:

    class ValidationException extends RuntimeException {
      Object invalidObject
      ValidationException(String message, Object invalidObject) {
        super(message)
        this.invalidObject = invalidObject
      }
    }
    

    我还构建了一个服务类来抽象heatmap操作(并将params数据绑定到对象):

      def addJob(params) {
    
        def user = User.findById(params.user_id)
    
        if (user) {
    
        def heatmap = new Heatmap(params)
    
        def process = new JobProcess(params)
    
            process.addToHeatmaps(heatmap)
            user.addToJobs(process)
    
        if (user.save()) {
          return heatmap
        } else {
           throw new ValidationException("Invalid form", heatmap )
          }
        }
     }
    

    我的控制器:

      try {
        def heatmap= HeatmapService.addJob(params)
          flash.message = "Running new process : $heatmap.job}"
          redirect(uri:'/')
      } catch (ValidationException che) {
        flash.message = "Validation Failed ${che.message}"
        render(view:'create', model:[heatmap:che.invalidObject])
      }
    

    我的第一期 :我没有使用:user.save()进行错误验证-为什么不执行验证?
    我可以通过:if(heatmap.validate()&&user.save())修复此问题购买更新if(user.save())。
    有没有更好的方法?

    我的第二期 :我的重定向未触发无效的post异常。
    我被重定向到我的创建视图,但是我的所有字段都是空白的(我丢失了所有字段信息),没有验证错误。
    不过,我使用的是模型:【heatmap:che.invalidobject】。
    除此之外,我正在传递InvalidObject,所以我的创建视图应该显示确切的验证错误?怎么了?

    谢谢

    1 回复  |  直到 14 年前
        1
  •  0
  •   Fabien Barbier    14 年前

    我发现了我的问题,这是由于我的GSP视图,我使用了错误的bean:

    <td valign="top" class="value ${hasErrors(bean: heatmapInstance, field: 'project_name', 'errors')}">
    

    所以,我更新到heatmap,现在我得到了错误验证:

    <td valign="top" class="value ${hasErrors(bean: heatmap, field: 'project_name', 'errors')}">
    

    谢谢维克多。

    推荐文章