2013-03-01 57 views
0

我有重定向創建和保存方法如下:如何做適當的驗證,並在一個Grails應用

def create() { 
    def myColorInstance = new Color() 
    return (colorInstance: myColorInstance] 
} 

def save() { 
    Date someDate = params.date("somedate", "MM/dd/yyyy") 
    int someInt = params.int("someInt") 
    color = colorService.add(params.colorname, someDate, someInt) 
    if (color.hasErrors()) 
    render (view: "create", model: [colorInstance: color]) 
    else 
    redirect (action: "list") 
} 

在我的頁面佈局我有以下幾點:

<g:hasErrors> 
     <div class="alert alert-error">Please try submitting again</div> 
</g:hasErrors> 

的我得到的這種行爲是,當用戶輸入內容並且驗證失敗時。他們看到消息Please try submitting again和URL更改爲http://localhost:8080/myapp/color/save,所以現在當他們第二次提交(再次輸入任何內容)時,我的應用失敗並顯示消息:「無法將類'null'強制轉換爲'int'類。嘗試'java.lang.Integer'而不是「

什麼是處理這種情況的最佳方法?我希望用戶看到上面的錯誤消息,他們應該能夠再次糾正錯誤,並嘗試再次提交,它應該工作..

回答

1

您不能將int設置爲空,這是什麼params.int("")可能會返回。但是,Integer可以爲null。

Integer someInt = params.int("someInt") 

這將修復您的異常,但是它返回null的原因與您的視圖沒有首先傳遞數據有關。

FYI這是不正確的語法:

def create() { 
    def myColorInstance = new Color() 
    return (colorInstance: myColorInstance] 
} 

應該是:

def create() { 
    [colorInstance: new Color()] 
} 
+0

你是對的。這是我的一個愚蠢的錯字錯誤> _ <'render(view:「create」,model:[colorInstance:color])''而不是'render(view:「create」,model:[colorInstnce:color])'錯字! – birdy 2013-03-01 23:42:18