でも普通にはEnumを呼び出すことができないわけです。
そんで一番簡単なのが
BeansWrapper.getDefaultInstance().getEnumModels()
これをテンプレートに渡して上げる方法。
まずはコントローラー
@RequestMapping(value = "/hoge", method = RequestMethod.GET) public String hoge(Locale locale, Model model) { model.addAttribute("enums", BeansWrapper.getDefaultInstance().getEnumModels() ); return "hoge";}
それからテンプレートに下記のように書けばいけます。
${enums["com.example.MinisiteFieldType"].SEOTEXT}
でも、これだと毎回コントローラーに書かないと行けないので面倒。
そこでFreeMarkerViewクラスを拡張します。
CustomFreeMarkerViewクラスを作って、下記を記述。public class CustomFreeMarkerView extends FreeMarkerView {
@Override protected void exposeHelpers(Map<String, Object> model, HttpServletRequest request) throws Exception { super.exposeHelpers(model, request); model.put("enums", BeansWrapper.getDefaultInstance().getEnumModels()); }
}
FreeMarkerViewResolverクラスを拡張して、実際に使えるようにします。
CustomFreeMarkerViewResolverクラスを作って、下記を記述。public class CustomFreeMarkerViewResolver extends FreeMarkerViewResolver {
public CustomFreeMarkerViewResolver() { setViewClass(requiredViewClass()); }
@SuppressWarnings("rawtypes") @Override protected Class requiredViewClass() { return CustomFreeMarkerView.class; }
}
あとはspringの設定ファイルにCustomFreeMarkerViewResolverをFreeMarkerViewResolverの代わりに使用するよう指定してやります。
これで毎回コントローラーに記述しなくても同じように使えます。
以上
Clean Code アジャイルソフトウェア達人の技 Robert C. Martin 花井 志生 アスキー・メディアワークス 2009-05-28 売り上げランキング : 198273 Amazonで詳しく見る |