2010-10-22 124 views
0

我需要验证3个域之间的保存操作,这里是关系:关于多领域关联的Grails验证问题?

用户 - 工作进程:一对多,JobProcess - 热图:一对多。

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 
    } 
} 

我还搭建服务类抽象的热图操作(并结合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())。
有没有更好的方法来进行?

我的第二个问题:我的重定向不会触发invalid-post异常。
我被重定向到了我的创建视图,但是我的所有字段都是空白的(我丢失了所有字段信息)并且没有验证错误。不过,我正在使用模型:[heatmap:che.invalidObject]。
除了例外,我传递了invalidObject,所以我的创建视图应该显示确切的验证错误?怎么了 ?

感谢

+1

1.您也可以引用违反的验证器吗? 2.你也可以尝试在视图中渲染一个$ {heatmap},看看有什么?看起来更像是一个错字。 – 2010-10-22 16:52:42

回答

0

我发现我的问题,这是由于我的GSP的看法,我用错了豆:

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

所以,我更新到热图,现在我得到我的错误验证:

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

谢谢维克多。