フィルターの使用法についての提案が必要です。私が考えていることが良い方法であることを知りたかっただけです。
そのため、JSP、Spring MVC 2.5、javascript などを使用して 5 ~ 6 個の画面を開発する任務を負っています。
これらの画面はすべて、ドロップダウン リストなどの多くの共通データ要素を共有しています。
フィルターを実装し、これらのドロップダウン値を内部に入力することを考えていました。フィルターのURLパターンに該当するすべての画面がこのデータを取得するように、フィルター内のスプリングModelMap。
これは正しいアプローチですか?
2 に答える
フィルターでうまくいくと思いますが、このアプローチには近づきません。また、Spring のインターセプターを使用して同じことを行い、依存性注入、トランザクション管理、Spring Data パッケージなどの Spring の機能を引き続き利用することもできます。
ディスパッチャーの構成で、インターセプターをセットアップします。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="org.my.domain.interceptors.LookupHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
次に、インターセプター クラスを定義します。
public class LookupHandlerInterceptor extends HandlerInterceptorAdapter {
@Autowired
LookupLoaderApplicationListener loader;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
request.setAttribute("lookupList", loader.getCategories());
return super.preHandle(request, response, handler);
}
}
このアプローチにより、セットアップした永続性など、アプリケーション内で使用している可能性のある他の Spring 機能を利用できます。次に、データベース内でこのリストを管理できます。
最小の驚きの原則に違反し、アプリケーションの別の部分でコントローラーの正しい機能に重要なコードを隠すことは、これを行うことから少しの「魔法」/巧妙さを絞り出す価値はないと思います。
画面を設定するコードを将来の開発者から隠すのはなぜですか?
それらすべてが現在共通の参照データを共有しているという理由だけで、それらは永遠に続くのでしょうか? さまざまな画面の要件が発散し始めるとすぐに、見苦しくなります。
基本的に、コンポジションの代わりに継承を使用してコントローラーを作成することのすべての欠点があり、さらにコントローラーからコードを見ることさえできません。一般的な作業を行うユーティリティ Bean を作成し、それをコントローラーに挿入し、それ@ModelAttribute
を呼び出す 1 行のメソッドを記述します。個々の要件が将来変更されたときの混乱ははるかに少なくなります。