2012-03-17 20 views
16

Apache Tiles(これまでのところ、私は数回使用していました)よりも使いやすく優れたフレームワークを探しています。Apache Tilesのより良い代替方法

タイルでは、100個のアクションがあるときに、100個のjspファイルを作成し、tiles.xmlに100個の定義を作成する必要があるようです。

私のテンプレートを管理するためのより良いフレームワークはありますか?私が作成したい、例えば、2つのテンプレート:コンテンツ
bについて

a)のメニューと列)、メニュー、コンテンツのためのコラム、両方のテンプレートでバナー

と右の列メニューが一定です。 template bでは、右の列は定数なので、内容の列のみが異なります。この単純な例では、には、template aを拡張する各JSPファイルを定義したくありません。それはまあまあです。あるいは、私は不自由な人で、Apache TilesでDEFAULTテンプレートを定義することができます。私はそれを正しく使用していません。いずれの場合でも、すべての助けに感謝します。

+3

私はあなたのケースでsitemeshは何が必要以来、より良いアプローチは、ちょうど2つのテンプレート、シンプルであることができると思います。設定したら、それを忘れることができます。 – jddsantaella

答えて

6

私はJSF + Faceletsを使用してしまいました。私はSpring MVCと組み合わせて、魅力的に動作します。

+1

MVCフレームワークを別のMVCフレームワークに結合することはできません。そのアイデアの誤解。 JSFはSpring MVCと同じMVCフレームワークです。 JSF MVCを使ってSpringを作成する可能性が最も高いです。より良い説明はここに記述されています:http://stackoverflow.com/questions/18744910/using-jsf-as-view-technology-of-spring-mvc –

7

他のアプローチは、Sitemeshです。 オリジナルを変更できないビューをメッシュ化するように設計されているため、TilesのようなテンプレートフレームワークよりもHTMLトランスフォーム/デコレーションフレームワークです。

私の個人的意見では、Tilesはアプリケーションのより良いアプローチであり、xmlファイルを古いものにする何らかの種類のリゾルバ(いくつかの命名規則に基づく)を実装しようとしますが、これは問題ではありませんでした。

@See:This old introductionsは、SiteMeshの仕組みを示しています。

+0

大丈夫ですが、この種のリゾルバを持つテンプレートエンジンが大好きです。そんなことはありますか? – Fixus

+0

私は知りませんが、リゾルバがビューを解決する方法はアプリケーションの依存度が高いことを期待しています。それ以外の方法では、それを書くのは難しくないと思います。 – Ralph

+0

はい、Tiles-3には、あなたが言いたい解決能力があります。 チュートリアルをチェックアウト ...(http://tech.finn.no/the-ultimate-view-tiles-3/) – mck

-2

経験に基づいて、Apache Wicketを強くお勧めします。

+2

なぜこれがそうであるかを詳しく説明できますか? – joergl

7
thisに類似)

あなたはすべてのアクションの定義を必要としません。

この定型的な構成は、タイルのハングアップです(1日間)。ワイルドカードが導入されたときはタイル2で、特にOptionsRendererとともにタイル3で、実際には必要ありません。

は、ここでタイルの統合へ

  • 春、OptionsRendererを使用してフォールバックパターンを実装
  • ワイルドカードでの定義、
  • 、および
  • 定義組成をお届けしますtutorialです。
14

全体的に、私はタイルズよりSiteMeshをお勧めします。どのようにセットアップSiteMesh 3

あなたはページ内のテンプレート用のタイルを使用しますが、サイト全体のテンプレートのSiteMeshを使用することができますへ

Here's。それにもかかわらず...タイルはあまり吸うようにする方法

:コンフィギュレーションを超える

  1. 使用規則。たとえば、定義をwebapp/WEB-INF/tiles.xmlに入れて、それがどこにあるかをタイルに伝える必要はありません。

  2. ワイルドカードを使用:

<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> 

サーブレットAPにReloadableResourceBundleMessageSource Beanを追加します。 plication文脈。

のような内容で、ファイル/src/main/resources/messages.propertiesを行います

index.title = Welcome to Acme, Inc. 
contact-us.title = Contact Us 
+3

+1。非常に便利ですが、複数のdefault.jspテンプレートがある場合はどうなりますか?タイルはワイルドカードでそれらを区別する方法を知っていませんでした。 OPの場合と同様に、彼は2つのテンプレートを持っています。 (私は彼の場合、彼はただ無視することができますが、それはいつもあなたがやりたいことではありません。) – bphilipnyc