J2SE Java基础 J2EE 设计模式 struts hibernate spring freemarker ibatis xml xslt Javascript mysql Linux 系统架构
Java高级 webwork webservice 网页制作 oracle sql server 数据库基础 软件工程 网站建设 SEO 黑客基础 名人堂 Ruby
首页 > 技术文档 > Java > 开源相关 > JSF VS Tapestry 全面比较

JSF VS Tapestry 全面比较

作者: Flyingis 来源: csdn  标签:jsf tapestry struts webwork (English)

  Sidebar: 例子程序
  在下面本文提供了一个例子程序,该程序的代码大部分都将在这片文章中做出详细的描述。这个程序主要就是一个管理个人假期的工具,它的主要功能包括:
  * 一个home界面, 列出所有登记的假期,包括假期开始时间、天数以及一下描述信息;
  * 一个detail界面,用于浏览某一登记假期的详细信息;
  * 一个new界面,用于添加一个假期信息。

  下面这幅图展示了该程序的主体流程和功能:

对比1: 页面开发(Page Development)
  一个web应用实际上就是后端用java代码获取相应数据,并将数据传递给前端表现层代码,然后最终返回给终端用户。因此,在一个开发人员看来,当他初次接触JSF和Tapestry时,最直接的感觉就是JSF的表现层是基于JSP的模板技术,而Ta pestry的表现层模板基本就可以看作是一个HTML。

  JSF
  JSF采用JSP的技术作为其表现层技术。与标准兼容的JSF实现必须实现一个核心组件的JSP标签集。下面的代码就是一个使用了JSF组件标签的Html代码:

代码:
<h:form>     
  <h:panelGrid columns="2" border = "1">
        <h:outputText styleClass = "label" value="No"/>

        <h:outputText value="#{holidaySession.currentHolidayBooking.holidayID}"/>
        <h:outputText styleClass = "label" value="Date"/>
        <h:outputText value="#{holidaySession.currentHolidayBooking.date}"/>

        <h:outputText styleClass = "label" value="Number of days"/>
        <h:outputText value="#{holidaySession.currentHolidayBooking.amount.value}"/>
        <h:outputText styleClass = "label" value="Description"/>

        <h:outputText value="#{holidaySession.currentHolidayBooking.description}"/>
 </h:panelGrid>
 <BR>
 <h:commandButton value="Back" action="#{holidaydetail_backing.home}" immediate = "true"/>

</h:form>
  含有JSF标签的html页面不能在标准浏览器中预览。要想浏览,必须使用JSF设计工具或者直接部署到应用中,在真实运行环境中浏览。
  对于JSF技术来说,其表现层技术就是JSP,但是这不是唯一的解决方法。Hans Bergsten的文章介绍了可供选择的其他的方法,读者可阅读该文章获取详细信息,Improving JSF by Dumping JSP。 Bergsten的文章中指出了混合JSF和JSP标签暴露出的一些问题。当然,这些问题在JSF1.2和JSP2.1中会得到解决。

  Tapestry
  对于大多数的Tapestry应用来说,Tapestry的表现层模板看起来就是一个简单的规则的Html,只不过其中加入了一些Tapestry的属性。下面是一段例子代码:

代码:
<span jwcid = "@Conditional" condition = "ognl:currentHolidayBooking"> 
        <p><strong>Holiday Details</strong></p>
        <table>
        <tr>
                <td class = "label">No</td>
                <td><span jwcid = "@Insert"
                        value = "ognl:currentHolidayBooking.holidayID">1</span>
                </td>
        </tr>
        <tr>                     
            <td class = "label">Start date</td>
                <td><span jwcid = "@Insert"
                        value = "ognl:currentHolidayBooking.date" format = "ognl:dateFormat">1</span>
                </td>
        </tr>
        <tr>                              
            <td class = "label">Number of days</td>
                <td><span jwcid = "@Insert"
                        value = "ognl:currentHolidayBooking.amount.value">1</span>
                </td>
        </tr>
        <tr>              
            <td class = "label">Description</td>   
                <td><span jwcid = "@Insert"
                        value = "ognl:currentHolidayBooking.description">1</span>
                </td>
        </tr>
        </table>
</span>
  大家可以尝试把这段代码放入一个Html的body标签当中,你会发现浏览器可以正常的观看它。
  上面的例子中,jwcid = "@componentName"属性就是定义了一个Tapestry标签。
  Tapestry的模板不仅仅可以用HTML作为载体,它也支持其他的一些标记语言,Tapestry标签是具有良好格式的标签,即必须成对出现。 Tapestry模板技术支持的标记语言典型的就是HTML以及用于无线应用的WML。其最大的一个特点 就是,可脱离Servlet容器,直接预览。

  事实上JSF标签由于不是标准的html标签,使得它对于初学者来说,是难于使用的。而对于很多java程序员来说,他们喜欢编辑HTML代码,至少是乐意编写html代码。

  JSF技术宣称的一个技术优点就是,可使用同一个模板编写运行在不同设备上的应用,由此带来很大的灵活性。然而,这样做,由于要协调不同设备间的表现差异性,那么很可能同一个模板,将不能正好表现你的输出。同时,你不得不学习新的标签库的使用方法,并且搞懂它们是怎样映射到html的。随着时间的推移,JSF标签的简洁可帮助你很快的编写表现层代码,同时也降低了开发者对jsf设计工具的依赖。

  本文认为,JSF的学习成本高于其技术优点。在大多数情况下,我们并不需要编写适应于不同设备的应用。尽管JSF设计工具提供了简单的图形化的方法来构建和预览JSF应用,但是在一个开发中,页面设计人员更多的是喜欢用流行的HTML设计工具来编写和预览页面,这就发生了一个冲突,即只有将更多的页面工作转移到java程序员身上,因为一个页面设计人员通常情况下是不乐意去操作JSF设计工具的。

  JSF开发者一直在寻找一种解决这些问题的方法。JSF技术设计良好的扩展体系,使得这成为可能,其中一个技术浮现出来,那就是表现层控制器。一个非常有前途的表现层控制器的实现就是Facelets,由java.net创建的开放源代码项目。Facelets的灵感就来源于Tapestry的模板模型,这使得JSF不再依赖于JSP技术。Facelets允许开发者创建Tapestry风格的标签,就像下面这段代码一样:

代码:
    <input id="bar" type="text" jsfc="h:inputText" value="#{foo.bar}"/>
  在未来的一段时间内,Facelets将会被开发者所采用,或许会影响JSF未来的版本。


相关文章

评论列表

发表评论

赞助商