Javaで同等のASP.NETマスターページ
-
09-06-2019 - |
質問
Java Web開発の世界でマスターページに相当するものは何ですか? Tiles、Tapestry、Velocityについて聞いたことがありますが、それらについては何も知りません。マスターページと同じくらい使いやすいですか?
1つのテンプレートを設定するだけで簡単になり、その後のページはテンプレートから派生し、マスターページと同様にコンテンツ領域をオーバーライドします。
どんな例でも素晴らしい!!
解決
最初に、JavaのASP.Netに相当するものは、あなたが言及したもの(Tiles、Tapestry、Velocity)などのWebフレームワークになります。
マスターページを使用すると、マスターテンプレートに挿入されるコンテンツの観点からページを定義できます。
マスターページはASP.Net(.Net Webフレームワーク)の機能であるため、Java Webフレームワークのマスターページに似た機能を探しています。
http://tiles.apache.org/framework/tutorial/basic /pages.html は、TilesとJSPを使用して、Java WebフレームワークであるStrutsに似たものを実装する基本的な例を示しています。この場合、マスターページ機能はStrutsのプラグインです。
Velocityは汎用のテンプレートエンジンであり、Webページに特化しておらず、必要以上に複雑です。 (コード生成に使用されるのを見てきました。)
TapestryはTileよりもフル機能のWebスタックであり、おそらく目的に適しています。テンプレート機能には、コンポーネントを作成し、その中にすべての一般的なマークアップを含めることが含まれます。例は http://www.infoq.com/articles/tapestry5-intro。
これの詳細は、選択するJava Webフレームワークによって異なります。
他のヒント
フェイスレットもチェックアウトする必要があります。 DeveloperWorksには優れた入門記事があります。
Facelets <ui:insert/>
タグは、マスターページで使用されるASP.NET <asp:ContentPlaceHolder/>
タグに相当します。ページのその領域にデフォルトのコンテンツを提供できますが、これはオーバーライドできます。
別のページのFaceletsテンプレートに入力するには、テンプレートファイルを指す<ui:composition/>
要素から始めます。これは、ASP.NETページでMasterPageFile属性を宣言することとほぼ同等です。
<ui:define/>
要素の内部で、<asp:Content/>
タグを使用する方法と同様に、<=>要素を使用してテンプレートのデフォルトをオーバーライドします。これらの要素には、単純な文字列からJSF要素まで、あらゆる種類のコンテンツを含めることができます。
だから、すべてをまとめる...
master.xhtml 内:
<!-- HTML header content here -->
<ui:insert name="AreaOne">Default content for AreaOne</ui:insert>
<ui:insert name="AreaTwo">Default content for AreaTwo</ui:insert>
<!-- HTML footer content here -->
page.xhtml 内:
<ui:composition template="/WEB-INF/templates/master.xhtml">
<ui:define name="AreaOne">Here is some new content</ui:define>
<ui:define name="AreaTwo">
<p>Some new content here too</p>
</ui:define>
</ui:composition>
そして、これは次のようにレンダリングされます:
<!-- HTML header content here -->
Here is some new content
<p>Some new content here too</p>
<!-- HTML footer content here -->
Faceletsには、さまざまなデータでページコンポーネントを再利用する機能など、その他の利点もあります。
(詳細情報を提供するために編集。)
以前のプロジェクトで sitemesh を使用しましたが、設定は非常に簡単です。基本的に、マスターページに相当するデコレータを作成します。次に、どの子ページがどのデコレータを使用するかを定義します。詳細については、 sitemeshの紹介を参照してください。