Facelets使用 jsfc* 属性将HTML元素转换为其关联的 JSF 组件。这对于快速原型制作非常有用,因为它允许您使用视觉设计工具创建视图。但是,我最近发现了 Cay Horstmann的 这篇博客文章,他浪费了 jsfc 以及 h:dataTable 等复杂组件的使用。 __ ***
这让我感到震惊,因为 Cay Horstmann 是我最喜欢的Java书籍的多本作者。但是,我的Google- fu技能在试图确定问题的范围/性质时,结果是零,除了Ed Burns最近的帖子(他喜欢 jsfc) (他毕竟是 JSF 的共同规范负责人)之外。所以我的问题很简单,是否建议将 jsfc 与Facelets 一起使用?如果不是的话,会带来什么问题。
就像您说的那样,jsfc当您必须将HTML原型“转换”为JSF页面时,该属性实际上很有用。例如,当您有HTML输入文本时:
jsfc
<input type="text" .../>
您可以添加jsfc属性以将该HTML组件转换为JSF组件:
<input type="text" jsfc="h:inputText" .../>
这等效于编写以下JSF代码:
<h:inputText .../>
如Facelets文档的此处或此处所述,该属性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代码创建了一个表。
h:datatable
ui:repeat
如您所见,该jsfc属性可用于在JSF页面中将一个HTML组件转换为一个JSF组件。因此,对于复杂的组件(例如数据表),您将不得不使用一些替代方法(使用ui:repeat代替h:datatable组件)。
还有一点是,您将无法使用第三方库组件,例如RichFaces,IceFaces,Tomahawk等提议的组件。这些库确实是JSF的兴趣之一。
总结一下:jsfc将HTML原型转换为JSF应用程序可能很有用,本质上用于创建概念证明或设计通用UI。但是,我认为最好在“真正的”开发开始后避免使用此组件。