QA@IT

hibernateで日付のエラー表示がうまくできません

4088 PV

お世話になります。
会員登録のコードをJavaで記述しています。

[開発環境]
Windows 7 64bit
servlet3.0
eclipse4.2
tomcat 7

入力チェックにhibernateを用いているのですが、
下記のようなコードを記述すると
入力の有無は正常にチェックします。
未来の日付も正常にチェックします。
しかし1965-123-12と入力しても、
「生年月日が未来の日付か正しくない記述で入力されました。」
とエラー表示してくれません。
どなたかご教授宜しくお願い致します。

「Bean」

@NotEmpty(message="生年月日が入力されませんでした。")
private String birth;  
@Past(message="生年月日が未来の日付か正しくない記述で入力されました。") 
private Date date;
public void setBirth(String birth){
    try {
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern("yyyy-MM-dd");
        date = sdf.parse(birth);          
     } catch (ParseException e) {
        Calendar cal = Calendar.getInstance();
        date = cal.getTime();
     }
    this.birth = birth;
}   
public String getBirth(){
     return birth; 
    }   
    public Date getDate(){
        return date;
    }    
    public void setDate(Date date){
        this.date = date;       
    }

「servlet」

Bean user = new Bean();    
user.setBirth(request.getParameter("birth"));
user.setDate(user.getDate());

「jsp」

<table>
<tr>
  <td>生年月日<br>(YYYY-MM-DDでお願いします。 1967-03-24)</td>
  <td><input type="text" name="birth"/></td>
 </tr>
 <tr>
  <td>
   <input type="submit" name="submit" value="登録"/>
  </td>
 </tr>
</table>
  • 質問とは関係ないですが、setBirth()内で日付フォーマットがおかしい場合に現在日時を設定するのは、ちょっと違和感があります。あとuser.setDate(user.getDate());の処理もサンプル様なのかな。 -
  • masafumin様のおっしゃるとうりです。setBirth()内で日付フォーマットがおかしい場合に現在日時を設定するのは、意味がないので取り外しました。また、user.setDate(user.getDate());につきましては、いろいろとコードを書きかえて試していた時の残骸です。こちらも取り外します。注意力がなくて申し訳ありません。 -

回答

お騒がせしました。自己解決致しました。
Beanにorg.hibernate.validator.Patternをimportし、
Beanを以下に書き換えたところ、1965-123-12と入力しても、
「生年月日が正しくない記述で入力されました。」
と表示されるようになりました。
@Pattern(message="生年月日が正しくない記述で入力されました。", regex = "\d\d\d\d-\d\d-\d\d")
パターンを指定するregexは正規表現で数字のワイルドカードを使用してみました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。