環境:
春 3.1.3.RELEASE
春のウェブフロー 2.3.0.RELEASE
最近、この質問をスプリング ソース フォーラムに投稿しました。参照: Spring Webflow フォーマットの問題
リファレンス ドキュメントに記載されている手順と、stackoverflow の上位の回答にも従いました。
フォームが送信されてバインディングが発生したときに、無効な日付値を入力すると解析例外がスローされることを期待しています。しかし、私はこれが起こっているのを見ません。
また、例外がスローされた場合、フロントエンドにエラーメッセージを表示するにはどうすればよいですか?
アプリケーションで型変換の使用を開始したいと考えていました。以下の手順に従って、Spring MVC および SWF の型変換フォーマットを構成しました。
手順に従って、サーブレットコンテキストに追加しました
<!-- Enables controllers mapped with @RequestMapping annotations, formatting annotations @NumberFormat
@DateTimeFormat, and JSR 303 style validation -->
<mvc:annotation-driven conversion-service="applicationConversionService1" />
<webflow:flow-builder-services id="flowBuilderServices" conversion-service="defaultConversionService" view-factory-creator="mvcViewFactoryCreator" development="true"/>
<bean id="defaultConversionService" class="org.springframework.binding.convert.service.DefaultConversionService">
<constructor-arg ref="applicationConversionService1"/>
</bean>
Spring MVC と Spring Web Flow の両方で使用する独自のフォーマッターを登録する新しいクラスを作成しました。
@Component(value = "applicationConversionService1")
public class ApplicationConversionServiceFactoryBean extends
FormattingConversionServiceFactoryBean {
@Override
protected void installFormatters(FormatterRegistry registry) {
// Register the default date formatter provided by Spring
registry.addFormatter(new DateFormatter("dd/MM/yyyy"));
}
}
サーバーにデプロイすると、コンテキストが正しく初期化され、クラスパス スキャンによって Bean が登録されます。
バインドするフォーム モデルで、日付フィールドに新しい dateformat 注釈を付けました。
@DateTimeFormat(pattern="dd/MM/yyyy")
private Date revisedTermExpiryDate = new Date();
更新: 私はデバッグしていましたが、クラスパスに joda-time があるため、Spring が代わりに joda DateTimeFormatter を登録しており、解析は失敗していません。
注釈を実際に削除すると、期待どおりに解析例外をスローする DateFormatter が呼び出されますが、例外はフレームワークに飲み込まれます。
私の目的は、プレーンな DateFormatter をグローバルなデフォルト日付で登録し、厳密に解析 (lenient=false) し、解析例外を適切に処理することです。これは、Web フローごとにバリデーターで日付の解析を処理するよりも、優れた機能です。
ありがとう、シェーン。