2011-06-29 87 views
1

我無法弄清楚如何在我的Web應用程序的每個頁面中包含一段HTML(比如說一點點table)。JSF模板,在每個頁面中包含一段HTML

說,這是我想包括表,所以我做了一個模板:

<?xml version ... ?> 
<!DOCTYPE ..."> 
<html xmlns="... all the required namespaces ..."> 
    <head> 
    </head> 
    <body> 
     <table> 
      <tr><td>first</td><td>second</td><td>third</td><td>...</td></tr> 
     </table> 
    </body> 
</html> 

然後我有一個使用它的代碼:

<?xml version ...?> 
<!DOCTYPE ..."> 
<html xmlns="... all required namespaces ..."> 

    <body> 
     <h3>Will this be displayed?</h3> 
     <ui:composition template="tableTemplate.xhtml"> 
      <h4>Will this?</h4> 
     </ui:composition> 
    </body> 

</html> 

,我得到的頁面瀏覽器是:

<html xmlns ...> 
    <head> 
    </head> 
    <body> 
     <table> 
      <tr><td>first</td><td>second</td><td>third</td><td>...</td></tr> 
     </table> 
    </body> 
</html> 

所以有表,但其餘的都失蹤了!

回答

3

TRY

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

,並在您tableTemplate.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

    put your template here 

</ui:composition> 
4

在主模板,你需要使用<ui:insert>宣佈在模板定義將被插入的地方。

template.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">Default title</ui:insert></title> 
    </h:head> 
    <h:body> 
     <ui:insert name="body">Default body</ui:insert> 
     <table> 
      <tr><td>first</td><td>second</td><td>third</td><td>...</td></tr> 
     </table> 
    </h:body> 
</html> 

在模板客戶端,你需要使用<ui:define>來定義它們是在模板聲明的地方要插入的模板定義。

page.xhtml

<ui:composition template="template.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"> 
     Define your page title here 
    </ui:define> 

    <ui:define name="body"> 
     <h3>Define your body content here</h3> 
     <p>Blah blah</p> 
    </ui:define> 
</ui:composition> 

沒有HTML周圍<ui:composition>是必要的。無論如何他們將被忽略。只是不要把HTML放在那裏,那隻會浪費空間並且讓你自己感到困惑。

當您在瀏覽器中打開page.xhtml,下面將在渲染輸出結束:

<!DOCTYPE html> 
<html lang="en" 
    xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Define your page title here</title> 
    </head> 
    <body> 
     <h3>Define your body content here</h3> 
     <p>Blah blah</p> 
     <table> 
      <tr><td>first</td><td>second</td><td>third</td><td>...</td></tr> 
     </table> 
    </body> 
</html> 
+0

OK,現在我開始明白這個成分是如何工作的。我看到了這些缺點:1)HTML頁面的「常規」結構完全丟失,因爲客戶端必須定義由模板「粘在一起」的「碎片」2)如果我想插入頭部,我有爲它提供一個佔位符 – AgostinoX

+0

然後就這樣做,相反,用''。另請參閱我對上一個問題的回答(以及其中的「另請參閱」鏈接)。每種方式都有自己的(缺點)優勢。我明白「HTML完全丟失」的缺點。但是你也應該理解你不需要用這種方式爲每一頁重複相同的HTML「線框」的優點。如果您在主佈局中進行更改,則必須在每個頁面中執行此操作。 – BalusC