2012-05-25 60 views
6

在jsf中可以這樣做嗎?JSF 1.2:我可以在JSF視圖中創建可重用組件

<ui:composition> 
    <x:reusableCode id="editScreen">InnerHtml ... </x:reusableCode> 
    code... 
    <x:use component="editScreen"/> 
</ui:composition 

我知道我可以創建自己的組件,並在JSF標籤庫中註冊它,但我只在需要重複使用的HTML JSF的視圖文件。

+0

您使用的是JSF 2.0嗎? –

+0

對不起,我忘了添加到總結。我使用1.2 – Daggeto

回答

4

在Facelets 1.x中,您可以爲此創建一個標籤文件。

這是一個基本的開球示例。創建/WEB-INF/tags/some.xhtml

<ui:composition 
    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:outputText value="#{foo}" /> 
</ui:composition> 

定義它/WEB-INF/my.taglib.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE facelet-taglib PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" 
    "http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> 

<facelet-taglib> 
    <namespace>http://example.com/jsf/facelets</namespace> 
    <tag> 
     <tag-name>some</tag-name> 
     <source>/WEB-INF/tags/some.xhtml</source> 
    </tag> 
</facelet-taglib> 

註冊它/WEB-INF/web.xml

<context-param> 
    <param-name>facelets.LIBRARIES</param-name> 
    <param-value>/WEB-INF/my.taglib.xml</param-value> 
</context-param> 

(注意,當你有多個,用分號;將它們分開)

最後只需在主頁面模板中聲明它。

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:my="http://example.com/jsf/facelets" 
> 
    <my:some foo="value1" /> 
    <my:some foo="value2" /> 
    <my:some foo="value3" /> 
</ui:composition> 

更高級的例子可以在這裏找到:How to make a grid of JSF composite component?注:JSF 2.0的目標,但基於上面的例子中細微的變化它適用於Facelets的1.x的一樣好

+0

感謝您的這種方法,但我認爲有一種方法可以在一個jsf文件內創建可重用組件,而無需任何標籤註冊。 :) – Daggeto

+0

這有效,但'my.taglib.xml'中的' /WEB-INF/tags/some.xhtml'元素除外。我不得不將其更改爲' tags/some.xhtml'以使其正常工作。 – acdcjunior