JavaでCMSまたは単純なテンプレートエンジンを作成しようとしているとしましょう。
私が現在持っているもの:
Block
で、Module
いくつExtension
かの違いがあります。それらのすべてが拡張public abstract class AbstractElement
され、休止状態でデータベースにマップされます。このような構造により、後でこの混乱をすべて使用して、たとえば、ユーザーフレンドリーな要素を (Web サイトなどで) 管理したり、バージョンを確認したり、更新したりすることができます。
public class ElementController
は、DAO と同様に機能します。登録された要素に関するデータをデータベースから取得し、それを HashMaps に配置して、テンプレート クラスからアクセスできるようにします。
index.jsp
、基本的な「テンプレート」などがあります。
やりたいこと:
シンプルでベーシックなテンプレートエンジン(リード:ライト)。
<template:includePanel panel="Left">
現時点では、や などのテンプレート用の JSP タグがいくつか計画されていることがわかります<template:pageTitle>
。私が必要としているのはそのような基本だけであり、ご覧のとおり、JSP タグを使用すると、コードを挿入するよりもテンプレートが読みやすくなります (既存のテンプレート エンジンを使用することは可能ですが、それでも適切なものが見つかりません)。問題のある部分:ブロックまたはモジュールの管理。モジュールは大きな問題であり、「プラグイン」システムに派生する可能性がありますが、ブロックは基本的な要素であり、JSP に見られるものを除いてビジネス ロジックはありません。次に、それぞれに個別の「説明」クラスを登録するのは悪い設計です。
現在、上記のように、すべてのブロックの説明は、パネルのようなブロックの設定を処理するためにデータベースに保存され、それが属するパネルとパネル内での順序があります。したがって、唯一の問題はブロック (つまり、jsp ページ) の自動登録です。
私が見ることができる亜種:
<template:block name="BlockName">
...
</template:block>
このタグは、このブロックをテンプレートに追加する予定で、既に登録されているか、データベースに追加されている場合は、データベースから設定を更新します。ただし、JSP ページが実行時にコンパイルされている限り、このタグは処理されません。この場合、テンプレートを要求する前に各ブロックの JSP を呼び出す必要があります。これにより、ハッシュ (更新) からブロック情報が取得されます。長所: 1 つのページでいくつかの独立したブロックを定義し、それらをタグの本文を含むテンプレートに処理できます。情報を登録/取得/ブロックを含めるための他のコードは必要ありません。
public class AutoRegister
JSP ディレクティブで拡張させpage
ます。ブロックを登録するためのすべてのコードはコンストラクターに配置されますが、この場合、各ブロックのページを個別に呼び出す必要があります (この場合にリフレクションを使用しようとしましたが、ページがコンパイルされていない限り、見つかりません)。ページごとに 1 つのブロック (jsp/jspf) を除いて、前のバリアントに似ています。
Reflection
ライブラリを介してそれらを解析します (これは現在行われています)。短所:機能がすべてのブロックを登録することだけである限り、多くの「ゴミ箱」クラス。答えを探しているときに、
Velocity
や などのテンプレート エンジンを簡単に調べましたFreeMarker
が、私が見る限り、そのような「自動登録」を提供することはできません。
そして最後に、質問:
どのメソッド (上記または別のものから) またはテンプレートエンジンが、そのようなメカニズムに「簡潔で美しい」使用法 (単純な JSP タグなど) を提供できるか? または、上記のバリアントを試してテストしているときに、何かを見逃しましたか?