2010-04-12 66 views
1

我很難得到hasErrors與索引屬性一起工作。例如hasErrors與索引屬性

class Order { 
    String prop1 
    String prop2 

    static hasMany = [items: Item] 
} 

class Item { 
    String name 

    static constraints = { 
    name(blank:false) 
    } 
} 

驗證正常工作,並在item.name是空白我得到與

<g:renderErrors bean="${orderInstance}"/> 

不過,我想有輸入框的錯誤使用hasErrors高亮:

<g:each in="${orderIntsance.items}" status="i" var="item"> 
    <span class="field ${hasErrors(bean: orderInstance, field: ????????? , 'errors')}"> 
    <g:textField name="items[${i}].name" value="${item?.name}"/> 
    </span> 
</g:each> 

不知道如何與字段:財產,任何想法?

感謝

+0

做$ {hasErrors(豆:orderInstance,場: 'item.name', '錯誤')的作品,但沒有被索引 – Micor 2010-04-12 21:51:37

+0

文檔可能會有幫助:HTTP://www.grails .org/doc/1.2.2/guide/single.html#7.3%20Validation%20on%20the%20Client – armandino 2010-04-12 23:12:38

回答

1

發現了它,一定要實現每Grails的驗證文檔頁面中的自定義驗證(杜):

「在某些情況下(不尋常的情況),您可能需要知道如何將一個錯誤從嵌套子對象到父域對象在某些情況下,如果您在父對象之前驗證子對象,那麼在對象發送到JSP之前,子對象上的錯誤將被重置。 (http://www.grails.org/Validation

static constraints = { 
    children(nullable:true, validator: {val, obj, errors -> 
    def errorFound = false; 
    val.each{ child -> 
     if(!child .validate()){ 
     errorFound = true; 
     child .errors.allErrors.each{ error-> 
      obj.errors.rejectValue('children', "parent.child.invalid", 
      [child, error.getField(), error.getRejectedValue()] as Object[], 
      "For source [${child}], 
       field [${error.getField()}] with value [${error.getRejectedValue()}] is invalid.") 
     } 
     } 
    } 
    if(errorFound) return false; 
    }) 
} 
0

我有類似的要求,並嘗試以下方法,它的工作。只是想分享它

${hasErrors(bean: orderInstance, field: 'items['+ i +'].name', 'errors') 
+0

謝謝demongolem爲我的答案添加額外空格... :) – 2014-05-22 16:44:49