2010-01-20 70 views
2

我對如何在我的應用程序中繼續有一個基本的疑問。我有一個表單,我需要驗證所有的輸入是數字。我在決定與窗體關聯的bean的屬性類型時遇到了問題。我不知道,如果將它們設置爲字符串或將翻一番,這裏的原因:在春天驗證號碼

  • 如果我將它們設置爲double:如果我在輸入一些東西,不是一個數字輸入,當春天填充投入我在JSP中得到了一個Exception,它無法將它轉換爲double。
  • 如果我將它們設置爲字符串:我有一個很好的驗證,雖然我必須稍後將它們更改爲雙倍。但我的問題在於,這個bean是存儲在一個數據庫與休眠和註釋@column將它存儲爲文本,我想存儲它,如果它是一個雙。有沒有可能將列類型更改爲雙重延遲類型?

有沒有人可以給我任何想法如何在這種情況下先行? 謝謝。

回答

3

我建議你總是使用你的域類型,不要使用字符串,因爲這是HTTP發送參數的方式。如果一個字段的類型爲double,那麼您將在代碼中使用它,並將其存儲在數據庫中。讓Spring將請求參數轉換爲您需要的類型。

數據綁定對於允許用戶輸入動態綁定到應用程序的域模型(或用於處理用戶輸入的任何對象)很有用。 Spring提供了所謂的DataBinder類來做到這一點。

您可以在您的控制器的initBinder方法中註冊這些方法,並允許您將字符串從請求轉換爲所需的類型。例如,請參閱CustomNumberEditor類,該類用於將用戶輸入的數字字符串解析爲Bean的Number屬性。然後,您可以將其與Validator interface結合起來進行更復雜的檢查。

編輯:春季結合用途(如果你需要,但你沒有提供它指定一個字段required代碼)時,轉換失敗綁定錯誤typeMismatch錯誤代碼。在你的情況下,它默認顯示異常消息。要將消息更改爲更友好的消息,您必須使用前綴typeMismatch在屬性文件中提供捆綁密鑰。

這由DataBinder.setMessageCodesResolver指定,默認爲org.springframework.validation.DefaultMessageCodesResolver。在DefaultMessageCodesResolverjavadoc你可以看到完整的例子,但基本上,你只需要在你的屬性中添加這樣一個入口文件:

typeMismatch.yourField=Your user friendly error message goes here 
+0

謝謝,但我對此有疑問。我創建了一個CustomNumberEditor,但是當我輸入一個不是數字的字符串時,我必須拋出一個異常(我不能將它設置爲0)。然後,當我在錯誤中執行驗證時,它發現存在此異常,但是當我嘗試使用form:errors標記寫入錯誤消息時,它會在屏幕中寫入異常原因。我可以將這個異常映射到一個自定義消息,使得不能顯示異常類名稱嗎?謝謝。 – Javi 2010-01-20 12:31:22

+0

@Javi:我編輯了答案來回答你的問題。 – 2010-01-20 13:22:06

+0

非常感謝 – Javi 2010-01-20 13:31:40

1

如果您的消息中包含以下格式的條目,則可以將例外映射到自定義消息。屬性(或您正在使用的等效消息包)。

typeMismatch.fieldName,其中fieldName將是您正在驗證的字段的名稱。