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

时间:2010-02-25 21:48:45

标签: java jsf facelets

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

这令我感到震惊,因为 Cay Horstmann 是我最喜欢的多本Java书籍的作者。然而,当我试图确定问题的范围/性质时,我的Google-fu技能没有得到任何结果,除了Ed Burns的最近一篇帖子,他接近喜欢 jsfc (他是在 JSF 的所有联合规范领导之后。所以我的问题很简单,是否建议将 jsfc 与Facelets一起使用?如果不是它引入的问题是什么。

1 个答案:

答案 0 :(得分:35)

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

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

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

<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。但是,一旦“真正的”开发开始,我认为最好避免使用这个组件......