私は春のブートWebアプリケーションを持っていると私はこのようなコントローラの値を拒否:日付dt1
はdt2
前でない場合フォーマットスプリングエラーメッセージの引数
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String createSubmit(@ModelAttribute("createForm") CreateForm createForm, BindingResult result, SessionStatus status) {
DateTime dt1 = createForm.getDt1();
DateTime dt2 = createForm.getDt2();
if (!dt1.isBefore(dt2)){
result.rejectValue("fieldId", "validation.isbefore", new Object[]{dt1, dt2}, "first date must be before second");
}
}
ので、値が拒否されます。今、私はmessages_en.properties
でこのエントリではかなり標準ResourceBundleMessageSource
を持っている:検証エラーがが発生した場合
validation.isbefore = Start date {0} must be before end date {1}
、私は(dt1
とdt2
の両方がメッセージをフォーマットするために彼らのtoString()
を使用しています)メッセージStart date 3/21/16 5:01 PM must be before end date 3/20/16 5:01 PM
を取得します。
さて、java.text.MessageFormat
はいくつかのフォーマット、すなわち{0,date,short}
をサポートしています。しかし、それはjava.util.Date
でのみ有効であり、Joda Time(またはその他のカスタムクラスではありません)ではありません。
エラーメッセージ引数のフォーマット方法をカスタマイズする方法はありますか?私は妥当性検査の時にそれをしたくありません(最終コードでは、バリデータ自体がコントローラから分離され、選択された言語についての情報を持たないので、使用する日付形式はわかりません)。
本当に、あなたは、サーバー上のプレゼンテーションロジックを扱うべきではありません。 –
@EngineerDolleryサーバーはHTML(Spring MVC/Thymeleaf)を生成する責任があるので、サーバー上でプレゼンテーション/ローカライズを処理する必要があります。 –
HTMLは構造体のためのもので、CSS(時にはjavascript)がプレゼンテーションを担当します。 Javaは、検証、ビジネスルール、CRUDを担当します。これをフォーマットするにはjavascriptが必要ですが、日付を簡単に識別できるようにする必要があります。その後、GUIの人々はL&Fの問題に対処して、サーバーコードを書くことに乗り出すことができます。 :) –