2013-08-25 8 views
9

私はこのようなものに見えるのFooと呼ばれる自分のアプリケーション内のデータ・タイプ:このタイプは、Webアプリケーション全体で多くの形態で使用されているSpring MVCでコントローラ固有のフィールドフォーマッタをどのように設定しますか?

public class Foo { 
    // synthetic primary key 
    private long id; 

    // unique business key 
    private String businessKey; 

    ... 
} 

を、一般的に、あなたがidプロパティを使用して前後にそれを変換したいです私はそれを行うSpring3 Formatterを実装し、そのフォーマッタをグローバルなSpring変換サービスで登録しました。

しかし、代わりにbusinessKeyを使用してコンバートしたい1つのフォームの使用例があります。それを行うためにFormatterを実装するのは簡単ですが、Springにこの特定のフォームだけでそのフォーマッタを使用するように指示するにはどうすればよいですか?

私はこの例を提供していますフィールド固有のフォーマッタの登録に関するセクションがありhttp://static.springsource.org/spring/previews/ui-format.htmlで文書(一番下の5.6.6のすべての方法を参照)が見つかりました:これは私がしたい正確に何である

@Controller 
public class MyController { 
    @InitBinder 
    public void initBinder(WebDataBinder binder) { 
    binder.registerFormatter("myFieldName", new MyCustomFieldFormatter()); 
    }   
    ... 
} 

をしかし、これは2009年のプレビュー文書であり、registerFormatterメソッドが最後にリリースされたAPIになったようには見えません。

どうすればよいですか?

+2

をそれはあなたが、[SPR-7773](HTTPSを見ることができないようです。 org/browse/SPR-7773)、[SPR-6069](https://jira.springsource.org/browse/SPR-6069)および[SPR-6015](https://jira.springsource.org/browse/ SPR-6015) –

+0

うわー、そうです。それはJIRAのエントリーから判断すると、巨大な穴であり、Springチームが非常に真剣に取り組むものではありません。 – Jlaud

+0

あなたは、Annotation-AnnotationFormatterFactoryを使ってSpringが数字と日付をどのようにフォーマットするかを模倣することができます。 http://docs.spring.io/spring/docs/3.1.4.RELEASE/javadoc-api/org/springframework/format/AnnotationFormatterFactory.html –

答えて

2

このアプリケーションでは、PropertyEditorSupportクラスを使用しています。カレンダーを処理するための簡単な例がありますが、任意のカスタムクラスのために使用することができ、ちょうどgetAsText()setAsText()メソッドオーバーライドします://jira.springsource:

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Calendar.class, new PropertyEditorSupport() { 
     @Override 
     public void setAsText(String value) { 
      try { 
       Calendar cal = Calendar.getInstance(); 
       cal.setTime(new SimpleDateFormat("dd-MM-yyyy").parse(value)); 
       setValue(cal); 
      } catch (ParseException e) { 
       setValue(null); 
      } 
     } 

     @Override 
     public String getAsText() { 
      if (getValue() == null) { 
       return ""; 
      } 
      return new SimpleDateFormat("dd-MM-yyyy").format(((Calendar) getValue()).getTime()); 
     } 
    }); 
} 
+0

はい、PropertyEditorsを使用している場合、これはあなたが想定しているものです行う。しかし、PropertyEditorsは、フォーマッタのために段階的に廃止されています。そして、フォーマッタでは、これは不可能です。 – Jlaud

+0

ああ、私はPropertyEditorsが段階的に廃止されるのを知らなかった。 – Kejml

関連する問題