2012-06-25 54 views
2

要在JSF中創建自定義組件,需要創建一個擴展UIComponent並在JSF中註冊組件類型的類,例如使用@FacesComponent。要使用這個組件及其在Facelets頁面屬性,它是necesary鏈接在被稱爲標籤描述文件的特殊文件的Facelets標記組件:自定義JSF組件。使用UIComponentELTag

<tag> 
    <tag-name>test</tag-name> 
    <component> 
     <component-type>local.test.component_type</component-type> 
    </component> 
</tag> 

好了,但我很困惑的使用標籤類(和標籤處理程序)。查看mojarra源代碼,所有html基本組件都使用擴展UIComponentELTag的組件標記類在標記庫描述文件中聲明。例如:

<tag> 
    <name>commandButton</name> 
    <tag-class> 
     com.sun.faces.taglib.html_basic.CommandButtonTag 
    </tag-class> 
</tag> 

望着UIComponentELTag的JSF API:

UIComponentELTag專注其超,以便對採取的價值觀來自EL表達式的API特性。

該標籤設計用於Faces版本1.2和JSP版本2.1容器。

然後問題是,當我應該使用擴展UIComponentELTag的類來鏈接標記屬性與自定義組件而不是鏈接通過組件? 如果我不使用標籤類,那麼我的組件不能用於JSP頁面或以前的JSF版本,只能用於JSF facelets?

回答

1

如果我不使用標籤類,那麼我的組件不能用於JSP頁面或以前的JSF版本,並且只能在JSF facelets中使用?

這是正確的。如果您沒有爲JSF 2.0定製組件使用標籤類,那麼您的JSF 2.0定製組件與JSP不兼容,也不適用於JSF 1.2或更早版本。自JSF 2.0開始,JSP就被棄用了,所以除非你絕對需要支持JSP和/或JSF 1.2,否則你根本不需要創建標籤類。這樣可以避免不必要的樣板代碼。像PrimeFaces這樣的一些JSF 2.0組件庫甚至根本不支持JSP。

標籤處理程序是一個不同的故事。標記處理程序與UI組件的標記類不同。要理解標記處理程序是什麼,請查看JSF核心(<f:xxx>)標記庫。所有標準的JSF標籤處理程序都在那裏。它們在JSF 2.0中仍然很有用。通過標記處理程序,您可以控制如何構建JSF視圖(使用UI組件可以控制如何呈現JSF視圖)。

相關問題