2011-07-05 9 views
2

私は複雑なウェブサイトデザイン(ウェブからデザイン+ CSSをダウンロード)を持っており、コンテンツとデザインを分離できるように、巧みにincludeを使用したいと思います。Jsp Pages Hierarchy

しかし、それにはいくつかの複雑さがあります。コンテンツは<div>の中にあり、<div>などの中にあります。 どのようにインクルードを使用すれば基本的に、サイトの各繰り返し可能なアスペクト(ヘッダ、ナビゲーション)を独自のファイルに含めることができ、 JSPのデザインはありませんか?

すなわち、特定のページに、私はそれがあなたのためにこれのほとんどを行いますので、あなたはおそらくApache Tilesをご覧ください

//possible includes 
<h1>Hello World!</h1> 
//possible includes 
+0

[sitemesh](http://www.opensymphony.com/sitemesh/)をお勧めします。これはあなたの望むものとほぼ同じです。しかし、それはsitemeshの背後にあるグループが少し崩壊、または何かを持っているようだ。 – aroth

+0

JSPの後継Faceletsを使用する機会はありますか?あなたは、[この回答]の2番目の部分であなたが望むものの例を見ることができます(http://stackoverflow.com/questions/4792862/how-to-include-another-xhtml-in-xhtml-using-jsf-2 -0-facelets/4793959#4793959)。 JSFをMVCフレームワークとして採用するだけで十分です。 – BalusC

+0

@BalusCこれは大学のプロジェクトのためです...いいえ。 –

答えて

2

を持っていると思います。

あなたが2つのファイルを作成することができます独自のロールしたい場合は、ページの開始と終了とheader.jspとfooter.jspを言う:

header.jsp

<html> 
    <head> 
    </head> 
    <body> 
     <div> 
     //header content 
     </div> 
     <div> 
     //main content 

と、 footer.jsp

 </div> 
    </body> 
    </html> 

あなたのコンテンツページに両方を含めます。

代わりに、単一layout.jspページを作成することができます。そして、すべての要求は、レイアウト・ページをロードする、コンテンツ変数を移入します

<html> 
    <head> 
    </head> 
    <body> 
     <div> 
     //header content 
     </div> 
     <div> 
     <c:out value="${content}"/> 
     </div> 
    </body> 
    </html> 

を。この方法では、すべての場所でインクルードを繰り返す必要はありません。

例:

 String content = "<h1>Hello World!</h1>"; 
     request.setAttribute("content", content); 
     //forward to layout.jsp 

この方法は、コンテンツが表示されますlayout.jspページに:あなたはこのように変数に値を与えることができ、あなたのサーブレットで 。もちろん、そのような可変プレースホルダをいくつか作成することができます。

第3のオプション: 動的コンテンツを含めるには、jsp:includeタグを使用します。たとえば についてlayout.jspページには、次のようになります。

<html> 
     <head> 
     </head> 
     <body> 
     <div> 
      //header content 
     </div> 
     <div> 
      <jsp:include page="${page}"/> 
     </div> 
     </body> 
    </html> 

ザ・タグ指定されたURLにあるページをフェッチします含まれています。この提案を使用する理由は、より複雑な表示がある場合は、JSPページを使用して表示を構成する方が良いでしょう。サーブレットはビジネスロジックにのみ関係します。それぞれのディスプレイに対して別々のjspページを作成できます。サーブレットは次のようになります。

//business logic 
    //save the data to be displayed in the request 
    String page = "nextpagetodisplay.jsp"; 
    request.setAttribute("page", page); 
    //forward to layout.jsp 
+0

この 'layout.jsp'の使い方の例を示すことができますか? –

+0

@Amir Rachum答えにもう少し追加しました。お役に立てれば。 –

+0

すべてのページはサーブレットに由来していますか? –