2012-10-02 15 views
2

我是一個很長時間的JSP用戶,但facelets新手,並堅持我認爲會是一個非常簡單的任務。如何將可選的facelet模板內容封裝在div標籤中?

如何將可選模板內容封裝在div標籤中?

例如給出下面的簡化模板:

<?xml version='1.0' encoding='UTF-8' ?> 
<html xml:lang="en" lang="en" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html"> 

    <h:head> 
     <!-- head stuff here --> 
    </h:head> 

    <h:body> 
     <!-- main body stuff here --> 
     <div class="border-box"> 
      <ui:insert name="optional" /> 
     </div> 
    </h:body> 

</html> 

如果我用這個模板沒有定義可選的內容,我會得到一個不必要的空箱。

我搜索了一個解決方案,發現同樣的問題提出了幾次,但沒有真正的答案。

任何人都可以幫我嗎?這對我來說似乎是一個相當合理的事情,想用模板系統做,但它讓我難倒了。

回答

0

只刪除div,使像這樣在使用模板的頁面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head /> 
<body> 
<ui:composition template="template.xhtml"> 
    <ui:define name="optional"> 
    <div class="border-box"> 
     <!-- Content here --> 
    </div> 
</ui:define> 
</ui:composition> 
</body> 
</html> 
+0

此而破壞了模板的目的,不是嗎?每次調用模板時都會出現通用的div標籤,並帶有所有伴隨重複代碼的問題。 –

+0

然後,您可能不需要模板,而是使用參數的ui:fragment。 [這個答案](http://stackoverflow.com/questions/5650606/acessing-the-name-attribute-of-a-uiinsert)可能是你所需要的 – ElderMael

2

感謝MAEL,如下所示:片段似乎是去當內容將適合在UI方式:參數值屬性,但我將與您的第一個建議。我將用ui來裝飾包裝器:裝飾。

頁面模板:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xml:lang="en" lang="en" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html"> 

    <h:head> 
     <!-- head stuff here --> 
    </h:head> 

    <h:body> 
     <!-- main body stuff here --> 
     <ui:insert name="optional" /> 
    </h:body> 

</html> 

包裝的模板:

<?xml version='1.0' encoding='UTF-8' ?> 
<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

    <div class="border-box"> 
     <ui:insert /> 
    </div> 

</ui:composition> 

調用:

<?xml version='1.0' encoding='UTF-8' ?> 
<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    template="page.xhtml"> 

    <!-- other ui:defines --> 

    <ui:define name="optional"> 
     <ui:decorate template="wrapper.xhtml"> 
      <!-- optional content --> 
     </ui:decorate> 
    </ui:define> 

</ui:composition> 
相關問題