簡體   English   中英

Spring MVC表單驗證日期字段

[英]Spring MVC form validation Date field

我有一個表單字段,應將其轉換為Date對象,如下所示:

<form:input path="date" />

我需要通過以下方式進行驗證:

  1. 如果用戶將此字段留空。 我需要設置一些默認日期。

  2. 如果用戶設置了不可接受的格式,我需要提出一個錯誤。

問題是我可以滿足第一或第二要求。

  1. 我可以注冊PropertyEditor並在日期不可接受的情況下將null設置為空,並且在此字段為null的情況下設置一些默認日期。 但是用這種方法我不能滿足第二個要求,因為如果我將其轉換為null,我將無法向用戶注冊第二個錯誤。
  2. 我可以設置@DateTimeFormat(pattern =“ dd-MMM-yyyy”)批注並提供適當的typeMismatch錯誤,但是當用戶在此字段中保留空值時,它仍會返回此錯誤。

解決這個問題有什么好的辦法嗎?

如果您將從Spring MVC驗證器轉到Hibernate,則有一種方法可以做到這一點。 沒什么大不了的,因為Hibernate驗證器可以與Spring Validator界面很好地配合使用(也可能對支持組的SmartValidator接口很感興趣)。

之后,您可以指定
@NotNull
日期字段上的注釋。

在屬性文件中只需添加
NotNull.[formName].[dateField] =如果沒有發送日期,則顯示此消息typeMismatch.[formName].[dateField] =如果spring無法將輸入轉換為日期對象(格式驗證錯誤),則顯示此消息

對於格式檢查,可以使用CustomDateEditor

使用此解決方案,您將在指定的每種情況下收到預期的驗證錯誤消息。

當我不得不面對這樣一個問題時,我會顛倒邏輯。 我沒有將默認值設置為空字段,但在操作的渲染部分中將默認值預加載了該字段。 因此,我可以只使用@DateTimeFormat(pattern="dd-MMM-yyyy")安全地進行@DateTimeFormat(pattern="dd-MMM-yyyy")因為一個空字段假定用戶故意刪除了默認值,這是一個錯誤。

因此,恕我直言,您應該在該表單的控制器的GET部分中設置默認值,並堅持使用簡單的@DateTimeFormat(pattern="dd-MMM-yyyy")批注。

我有一個使用帶日期字段的@ModelAttribute注釋對象的應用程序。 在對象類中,使用DateTimeFormat(pattern="dd/MM/yyyy")在getter和setter上注釋date字段。 Spring(3.2.4)為date字段接受一個空值,將其簡單地設置為null。 因此,您應該使用@DateTimeFormat(pattern="dd-MMM-yyyy")並且仍然能夠接受空值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM