正如您所说,jsfc 属性在您必须将 HTML 原型“转换”为 JSF 页面时非常有用。例如,当您有一个 HTML 输入文本时:
<input type="text" .../>
您可以添加jsfc 属性,以便将此 HTML 组件转换为 JSF 组件:
<input type="text" jsfc="h:inputText" .../>
这相当于编写如下JSF代码:
<h:inputText .../>
正如 Facelets 文档 here 或 here 中所述,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 组件,而是使用 HTML 代码创建一个表,使用 JSF 组件 ui:repeat 对行进行迭代。
如您所见,jsfc 属性可用于将 JSF 页面中的一个 HTML 组件转换为一个 JSF 组件。因此对于复杂的组件,例如数据表,您将不得不使用一些变通方法(使用ui:repeat 而不是h:datatable 组件)。
另外一点是您将无法使用第三方库组件,例如 RichFaces、IceFaces、Tomahawk 等提出的组件。而这些库确实是 JSF 的兴趣之一。
总结一下:jsfc 可用于将 HTML 原型转换为 JSF 应用程序,主要用于创建概念证明或设计通用 UI。但是,我认为一旦“真正的”开发开始,最好避免使用这个组件......