2012-01-26 21 views
5

我正在使用Spring 3 Portlet MVC。 MVC中的驗證/綁定應該是一樣的。以任何方式獲取BindingResult for @RequestParam?

我只有一個int表單字段。當我在做

void doSmth(MyForm form, BindingResult bindingResult) throws ... { 
    int bindErrors = bindingResult.getErrorCount()) 
    ... 

,並提交不能被解析爲int這個方法會被執行並且bindErrors是1,這個方法接收是0,這是偉大的形式字段值的字段值。

但是創建一個只包含單個字段的表單並不好。

我改變了代碼:

void doSmth(@RequestParam int userId, BindingResult bindingResult) ... { 
    int bindErrors = bindingResult.getErrorCount()) 
    ... 

並在瀏覽器中獲取的Portlet不可用消息,此異常:

org.springframework.web.portlet.FrameworkPortlet的processRequest能 未完成請求 org.springframework.beans.TypeMismatchException:未能將 類型的值'java.lang.String'轉換爲所需的類型'int';嵌套0​​例外是java.lang.NumberFormatException:對於輸入字符串:「Q」

問題:是否有任何方式繼續進行方法執行,並在其中處理綁定錯誤即使@RequestParam類型轉換失敗?我試圖讓@RequestParam不需要,並提供默認值 - 沒有幫助。

回答

3

Spring引用僅允許BindingResult用於命令或表單對象。

org.springframework.validation.Errors/org.springframework.validation.BindingResult上一個命令或表單對象(緊接在前面的方法參數)的驗證結果。

(15.3.2.3 Supported handler method arguments and return types)

所以,你可能需要自己來實現它。

,或者你包裹在一個命令對象的單個int,並使用該對象的結合結果(一個例子可以在這裏找到:https://stackoverflow.com/a/13407434/280244

+0

好,如果它不支持開箱即用的話,我想我可以和一個價值bean一起生活,謝謝 –

相關問題