2010-02-25 94 views
29

Facelets使用jsfc屬性將HTML元素轉換爲與其關聯的JSF組件。這對快速原型製作非常有用,因爲它允許您使用可視化設計工具創建視圖。 dataTable的:不過我最近礁HORSTMANN在那裏他與複雜的組件,如^h奠定廢物利用JSFC一起發現this博客文章。我應該使用Facelets「jsfc」屬性嗎?

這令我擔心的是Cay Horstmann是我最喜歡的多本Java書籍的作者。然而,當我試圖確定問題的範圍/性質時,我的Google-fu技能取得了零結果,除了最近發佈的Ed Burns,他接近jsfc(而且他畢竟是的合作伙伴JSF)。所以我的問題很簡單,是否推薦使用jsfc與Facelets?如果不是,它引入了什麼問題。

回答

32

正如您所說,當您必須將HTML原型「轉換」爲JSF頁面時,jsfc屬性本質上是有用的。例如,當你有一個HTML輸入文本:

<input type="text" .../> 

你可以以這個HTML組件轉換成一個JSF組件添加jsfc屬性:

<input type="text" jsfc="h:inputText" .../> 

這相當於編寫以下JSF代碼:

<h:inputText .../> 

作爲Facelets的文檔herehere中所述,屬性jsfc也可以用來「映射」Facelets組件。例如,您可以刪除HTML代碼的一部分:

<span jsfc="ui:remove"> 
This won't be compiled either <h:outputText value="#{foo.bar}"/> 
</span> 

您也可以使用該屬性創建表:

<table> 
    <tr jsfc="ui:repeat" value="#{dept.employees}" var="emp" class="#{emp.manager ? 'mngr' : 'peon'}"> 
     <td>#{emp.lastName}</td> 
     <td>#{emp.firstName}</td> 
    </tr> 
</table> 

在這個例子中,我們沒有這個錶鏈接到一個h:datatable組件,但我們使用JSF組件ui:repeat在行上迭代,創建一個包含HTML代碼的表。

如您所見,jsfc屬性可用於將一個HTML組件轉換爲JSF頁面中的一個JSF組件。因此對於複雜的組件,例如數據表,您必須使用一些解決方法(使用ui:repeat而不是h:datatable組件)。另一點是你將不能使用第三庫組件,例如RichFaces,IceFaces,Tomahawk等提出的組件。而這些庫真的是JSF的利益之一。

因此總結:jsfc可以用來將HTML原型轉換爲JSF應用程序,本質上用於創建概念驗證或設計通用UI。不過,我認爲一旦「真正」的開發開始,避免這個組件更好...

+0

呃...實際上,我剛剛用第三方組件測試了jsfc屬性,它工作正常。 –