2012-04-01 7 views
8

私はJSFで遊んでいて、ヘッダー/フッター/ナビゲーション/コンテンツ パネルを持つプロジェクトを作成しています。しかし、プロジェクトは1ページから2ページなどになり、各ページのレイアウトが異なります。ページ間で同じルックアンドフィールを維持する再利用可能なテンプレートを作成するにはどうすればよいですか?ヘッダー/フッター/ナビゲーションは同じですが、コンテンツは更新されますか?header/footer/navigationを使用して再利用可能なテンプレートを作成する方法は?

答えて

22

これは、マスターテンプレートの古典的なケースのようです。そのようなテンプレートでは、すべてのページに共通のものをすべて入れてから、実際のページでこのテンプレートを参照し、「空白を埋める」。ある意味では、古典的なインクルードの逆です。

など。

/WEB-INF/templates/masterTemplate.xhtml:

<!DOCTYPE html> 
<html lang="en" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
> 
    <h:head> 
     <title> 
      <ui:insert name="title">Some title</ui:insert> 
     </title>   
    </h:head> 

    <ui:include src="header.xhtml"/> 

    <h:body> 
     <ui:insert name="content" /> 
    </h:body> 

    <ui:include src="footer.xhtml"/> 

</html> 

次のようにページが、例えば、これを使用して

/hello.xhtml

<ui:composition template="/WEB-INF/templates/masterTemplate.xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
> 
    <ui:define name="title">hello</ui:define> 

    <ui:define name="content"> 
     Hi, this is the page 
    </ui:define> 
</ui:composition> 
+2

ショートと甘い.. !!! – kark

関連する問題