【问题标题】:Should I use Facelets "jsfc" attribute?我应该使用 Facelets“jsfc”属性吗?
【发布时间】:2011-01-21 05:28:59
【问题描述】:

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

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

【问题讨论】:

    标签: java jsf facelets


    【解决方案1】:

    正如您所说,jsfc 属性在您必须将 HTML 原型“转换”为 JSF 页面时非常有用。例如,当您有一个 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 组件,而是使用 HTML 代码创建一个表,使用 JSF 组件 ui:repeat 对行进行迭代。

    如您所见,jsfc 属性可用于将 JSF 页面中的一个 HTML 组件转换为一个 JSF 组件。因此对于复杂的组件,例如数据表,您将不得不使用一些变通方法(使用ui:repeat 而不是h:datatable 组件)。

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

    总结一下:jsfc 可用于将 HTML 原型转换为 JSF 应用程序,主要用于创建概念证明或设计通用 UI。但是,我认为一旦“真正的”开发开始,最好避免使用这个组件......

    【讨论】:

    • 嗯……其实我刚刚用第三方组件测试了jsfc属性,效果还不错……
    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2016-08-09
    • 2012-06-25
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    相关资源
    最近更新 更多