Apache Tilesよりも優れていて使いやすいフレームワークを探しています(これまでに数回使用しました)。
Tilesを使用すると、100個のアクションがある場合、100個のjspファイルを作成し、tiles.xml
に100個の定義を作成する必要があるようです。
テンプレートを管理するためのより良いフレームワークはありますか?たとえば、2つのテンプレートを作成したいと思います。
a)コンテンツのメニューと列
b)メニュー、コンテンツの列、バナー付きの右の列
どちらのテンプレートでも、メニューは一定です。 template b
では、右側の列が一定であるため、コンテンツ列のみが異なります。この簡単な例では、I したくないtemplate a
を拡張する各JSPファイルを定義します(ボディを提供します)。それはラメイモです。あるいは、私は足が不自由で、Apache TilesでDEFAULTテンプレートを定義できますが、それを正しく使用していません。いずれにせよ、すべての助けに感謝します。
最終的にJSF + Faceletsを使用しました。私はそれらをSpringMVCと組み合わせましたが、それは魅力のように機能します。
全体として、タイルよりも SiteMesh をお勧めします。
こちら SiteMesh3の設定方法
ページはめ込みテンプレートにはタイルを使用できますが、サイト全体のテンプレートにはSiteMeshを使用します。それにもかかわらず...
タイルの吸啜を少なくする方法:
設定より規約を使用します。たとえば、定義をwebapp/WEB-INF/tiles.xml
に入れれば、タイルにそれがどこにあるかを伝える必要はありません。
ワイルドカードを使用する:
<definition name="default" template="/WEB-INF/templates/default.jsp">
<put-attribute name="titleKey" value=""/>
<put-attribute name="body" value=""/>
</definition>
<definition name="*" extends="default">
<put-attribute name="titleKey" value="{1}.title"/>
<put-attribute name="body" value="/WEB-INF/views/{1}.jsp" />
</definition>
コントローラがビュー名index
を返す場合、それは定義*
と一致し、本文にJSPファイル/WEB-INF/views/index.jsp
を使用し、メッセージプロパティindex.title
を使用します。
コントローラがビュー名contact-us
を返す場合、それは定義*
と一致し、本文にJSPファイル/WEB-INF/views/contact-us.jsp
を使用し、メッセージプロパティcontact-us.title
を使用します。
テンプレートに次を追加します。
<c:set var="titleKey"><tiles:getAsString name="titleKey" /></c:set>
そして
<title><spring:message code="${titleKey}"/></title>
サーブレットアプリケーションコンテキストにReloadableResourceBundleMessageSource
Beanを追加します。
次のような内容のファイルを/src/main/resources/messages.properties
にします。
index.title = Welcome to Acme, Inc.
contact-us.title = Contact Us