2013-05-22 65 views
0

我有一個「Thing」域類,其中每個Thing都有一個記錄號(它不是自動生成的ID),用戶將使用它來訪問Thing:grails:只有一個字段/屬性的自定義驗證

class Thing { 
    ... 
    String recordNumber 
    ... 
} 

有一種形式,尋找一個一件事,明知其recordNumber:

<g:form action="search"> 
    <input name="recordNumber"> 
    <g:submitButton name="btn" value="go to this Thing"/> 
</g:form> 

我想以這種形式使用驗證過程:如果recordNumber沒有找到(Thing.findByRecordNumber(recordNumber) == null),然後輸入字段必須以紅色顯示,並且工具提示必須顯示錯誤消息「記錄編號」 ber沒有找到「。

據我所知/讀取(我是一個Grails新秀),這已經被寫入在Thing類的約束:

static constraints = { 
    recordNumber validator: { n -> Thing.findByRecordNumber(recordNumber) } 
} 

的問題是:我不這樣有形成所有的「物」的屬性來填充,只是一個recordNumber,所以我就不能叫

new Thing(params).validate() 

如何調用驗證只在一個領域,而不是整個對象?

回答

0

驗證是針對域類屬性的約束條件。您需要在您的控制器中執行以下操作:

def search = { 
    if(params.recordNumber && Thing.findByRecordNumber(params.recordNumber)){ 
     redirect(action: "show", params:[id:Thing.findByRecordNumber(params.recordNumber).id]) 
    }else{ 
     flush.message = "No record found" 
     render(view:'VIEW_WITH_SEARCH_FORM') 
    } 
} 

如果要驗證而不刷新頁面,請編寫一段JavaScript代碼。

相關問題