2010-02-25 75 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属性,它工作正常。 –