我应该使用 Facelets “jsfc” 属性吗?

2022-09-01 10:54:30

Facelets 使用 jsfc 属性将 HTML 元素转换为其关联的 JSF 组件。这对于快速原型设计非常有用,因为它允许您使用可视化设计工具创建视图。然而,我最近发现了Cay Horstmann这篇博客文章,他在其中浪费了jsfc与复杂组件(如h:dataTable)的使用

这让我感到震惊,因为Cay Horstmann是我最喜欢的多本Java书籍的作者。然而,在试图确定问题的范围/性质时,我的Google-fu技能没有产生任何结果,除了Ed Burns最近的一篇文章,他喜欢jsfc(他毕竟是JSF的共同规范负责人)。所以我的问题很简单,是否建议将jsfc与Facelets一起使用?如果不是,它引入了什么问题。


答案 1

正如你所说,当你必须将HTML原型“转换”到JSF页面时,这个属性基本上是有用的。例如,当您有 HTML 输入文本时:jsfc

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

您可以添加该属性以将此 HTML 组件转换为 JSF 组件:jsfc

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

这等效于编写以下 JSF 代码:

<h:inputText .../>

此处此处的 Facelets 文档中所述,该属性还可用于“映射”Facelets 组件。例如,您可以删除部分 HTML 代码:jsfc

<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>

在此示例中,我们不将此表链接到组件,而是使用 JSF 组件循环访问行,而是使用 HTML 代码创建一个表。h:datatableui:repeat

如您所见,该属性可用于将一个 HTML 组件转换为 JSF 页面中的一个 JSF 组件。因此,对于复杂的组件,例如数据表,您必须使用一些解决方法(使用而不是组件)。jsfcui:repeath:datatable

另一点是,您将无法使用第三库组件,例如RichFaces,IceFaces,Tomahawk等提出的组件。这些库确实是 JSF 的兴趣之一。

因此,总而言之:可以将HTML原型转换为JSF应用程序,本质上是用于创建概念证明或设计通用UI。但是,我认为一旦“真正”开发开始,最好避免使用这个组件......jsfc


答案 2

推荐