3

Java、Spring、Struts 2、Hibernateに、複数のクライアントにサーバーを提供するWebアプリがあります。複数のユーザーを持つ各クライアント。クライアントごとに個性を出すために、クライアントごとにヘッダーをカスタマイズしたいと思います。私はデコレータとしてsitemeshを使用しており、ベストプラクティスでこれを実現する方法について、ヒントや例、または正しい方向を示すことができる人を探しています。

あなたはどう思いますか?header.jspに直接コーディングする必要がありますか?ログインしたユーザーに関する情報を抽出し、そこからコードでカスタムヘッダーを作成しますか?それとも、もっと賢い解決策がありますか?

ありがとう!

アップデート:

私が欲しいものをさらに明確にするために:異なるプロパティ-各クライアントのファイルはオプションではありません。私たちは潜在的に何百ものクライアントを見ています。データベース駆動型である必要があります。しかし、それは簡単な部分です。情報をdbに保存し、必要に応じて抽出することに問題はありません。

私が理解しようとしているのは、これを行うための何らかの標準的な方法があるかどうかです。デコレータに正しい情報を提供するサイトメッシュデコレータの前に実行される、ある種のフィルタまたはアクション?

4

2 に答える 2

1

Struts2は、アプリケーションに対してグローバルな変数のアプリケーションスコープを提供します。

すべての顧客固有の文字列を#applicationスコープにロードします(アプリケーションの起動時にこれを行うためにSpringを使用します)。そこから文字列を参照することは非常に明白です#application.greeting。インターセプターを使用するという考えは、インターセプトするものがないため、好きではありません。私はあなたがしていることのためにアプリケーションスコープは完璧な場所だと思います。シングルクライアントシステムの場合、アプリケーションスコープに何かが保存される理由はわかりません。

余談ですが、タイルはサイトメッシュとは異なるテンプレートパラダイムを使用しており、目的はわずかに異なります。そのため、2つは無料にすることができます。XML定義に依存するタイルは、その定義をDBに格納することができ、計算量が確実に少なくなります。ただし、異なるUIコンポーネント間に相互作用がある場合、またはページに異なる要素が表示される場合は、sitemeshを使用する必要があります。したがって、基本的なテンプレートのニーズについては、タイルがすべてを実行し、非常に理解しやすいですが、ヘッダーに追加する必要があるJSに依存するページの中央に特定のウィジェットを追加したいとすると、これを行うのは難しいでしょう。タイル(ただし、明らかな解決策は、サイトの特定の部分で可能なすべての用途のために、JS機能を1つのJSファイルにロールすることです)。

Asside 2:速度やフリーマーカーなどのビューテクノロジーをタイルと組み合わせて使用​​することにより、ビューレイヤー全体をデータベースに移動することが考えられます。非常に有益なメンテナンスの問題については、言及したいと思いました。

于 2012-05-08T03:37:05.770 に答える
0

Sitemeshは、要求されたURL文字列に基づいて使用する装飾を決定します。したがって、すべてのURLにクライアントへの参照がない限り(メインのURL文字列の一部として、または既知のパラメーターとして)、Sitemeshはすぐに使用できます。助けにはならない。

これはあなたが望むものを達成するためのいくつかの可能性を残します。

1)たとえば、すべての着信要求に「&clientId = "xx」を追加する、Sitemeshの前に実行されるフィルターを記述します。

2)Sitemeshのソースコードを調べて、Sitemeshが最終的にどのデコレータを使用してオーバーライドするかを決定する場所を探します。私はこれを試したことがないので、これがどれほど実用的かわかりません。

3)jspページのスタイルシート定義をOGNL式にし、すべてのアクションが拡張する基本アクションクラスでその情報を提供します。このようにして、クライアントごとに(潜在的に)異なるCSSファイルが作成され、CSSを介してカスタマイズを提供します。

これがお役に立てば幸いです。

于 2012-05-09T07:01:15.687 に答える