您可以定義複合材料部件。它是用xhtml + jsf命名空間定義的,但在你的情況下,它是非單調的,支持組件,它是java類,爲每個複合組件使用實例化。
在複合組件界面中,您可以定義改變其行爲的屬性。然後在實現中,您可以插入所需的primefaces組件,其中包含一些硬編碼屬性,並且可以從複合組件調用中傳遞一些屬性。
考慮本教程:https://docs.oracle.com/javaee/6/tutorial/doc/giqzr.html
例
複合部件的資源,所以我們把它下面/resources
文件夾。讓我們創建子文件夾/resources/myCompositeComponents
並在那裏創建xhtml文件myCalendar.xhtml
。這將是我們的複合組件。基本上,它是帶有附加命名空間xmlns:cc="http://java.sun.com/jsf/composite"
的xhtml文件。這是代碼。您可以注意到兩個元素:<cc:interface>
和<cc:implementation>
。而<cc:interface>
中的<cc:attribute>
元素是我們複合組件的輸入。
<?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 xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html">
<cc:interface>
<cc:attribute name="label" default="Decision Date"/>
</cc:interface>
<cc:implementation>
<h2>#{cc.clientId}</h2>
<h:outputLabel
id="Label"
value="#{cc.attrs.label}"/>
<p:calendar id="Calendar"
effect="explode"
yearRange="2000:2100"
pattern="MM/dd/yyyy"
navigator="true" display="inline"
value=""
label="Label"
maxlength="10"
size="20">
<f:convertDateTime pattern="MM/dd/yyyy" />
</p:calendar>
</cc:implementation>
</html>
然後,讓我們使用它。爲了能夠聲明我們全新的組件,我們會將其他名稱空間放入使用頁面:xmlns:my="http://java.sun.com/jsf/composite/myCompositeComponents"
。命名空間uri的最後一部分對應於複合組件所在的文件夾/resources
。給它任何你喜歡的前綴。這裏是源代碼:
<?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 xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:my="http://java.sun.com/jsf/composite/myCompositeComponents">
<h:head>
<title>Simple JSF Facelets page</title>
</h:head>
<h:body>
<my:myCalendar id="LetsUseIt" label="MyLabel"/>
</h:body>
</html>
有一個屬性「標籤」的通知 - 即在「接口」元素聲明的屬性。
這是非常基本的用例,雖然它會幫助你的情況。更復雜的場景包括傳遞類型化屬性和實現支持組件 - java類,每次使用組件時都會實例化。
downvote,真的嗎? – amphibient 2014-12-02 20:53:44