【问题标题】:Java Server Faces 2.0 or Tapestry 5.2? [closed]Java Server Faces 2.0 还是 Tapestry 5.2? [关闭]
【发布时间】:2010-09-30 14:55:03
【问题描述】:

是否有比较 JSF 2 和 Tap 5 的最新文章?我似乎发现的一切都在比较 JSF 1.2 和 Tap4。

是否有人对 T5 或 JSF2 有任何经验并有时间宣传其中一个或另一个?

我正在寻找一个在 Hibernate 和 mySql 之上的 Java 快速开发框架。

接受其他框架销售宣传,但 JSF2 和 T5 目前是我们的首选。

【问题讨论】:

  • 我简单地使用过 JSF2。它比 JSF 1.2 更好。但这并不是什么认可,我拒绝宣传 JSF,所以我不能给你一个真正的答案(因此是评论)。但是正如您所说的“我正在寻找一个在 Java 中快速开发的框架,在 Hibernate 和 mySql 之上”......您看过 Grails 吗?它是 Groovy,当你需要时下拉到 Java,在 Hibernate 之上的简单 MVC 和 ORM。

标签: jsf frameworks tapestry


【解决方案1】:

在过去几年中,我主要使用 Tapestry 5;不过我不会传福音。选择一个好的 web 框架当然是个好主意,但通常不是你的主要问题。

我脑海中的好事和坏事的清单:

  • Tapestry 5 的初始学习曲线相当陡峭。魔术和元编程无处不在。您可能会争辩说这是对配置的过度约定。

  • 简单的事情很容易做,更难的事情需要您详细了解 Tapestry 5 的工作原理,如果您不了解(现在)可能会很难。

  • 我喜欢重新加载直播课程。您更改 T5 组件或模板中的某些内容并立即看到它。当您的应用程序做很多事情并且需要 30 多秒才能在 Jetty 中启动时,它真的很有用。

  • Tapestry 不支持动态页面结构。这通常不是问题,但如果您正在开发某种门户解决方案,人们可​​以单独安排组件,请不要使用 Tapestry。 Tapestry 用于静态结构,它处理得非常好。

  • Tapestry 有漂亮的 URL。 package/page/${param1}/${param2} ...

  • Tapestry 使用正确的 HTTP 动词来做事。链接是 GET,表单提交是 POST,post-redirect-get 模式是常态。

  • Tapestry 的社区不是很大。除了 Howard Lewis Ship,还有一些其他的提交者,但没有像 Wicket 那样的支持。因此,Tapestry 的发展相当缓慢。

  • Tapestry 的模板方法(使用类型和 ID 检测 HTML)是我见过的更好的方法之一,但它在将代码排除在 HTML 之外方面没有 Wicket 那样好。另一方面,类文件不那么冗长。不过,我认为 Wicket 方式更可取。

  • Tapestry 的文档有些不足。

我非常喜欢 Tapestry,我认为您可以使用它来提高工作效率,而且我总是很乐意参与使用它的项目。

不过,我建议您也检查一下 Wicket。它似乎比 Tapestry 获得了更多的关注,并且解决了一些不那么神奇的问题,但使用了一种常识性的方法。

(我只是简单地使用了 JSF 1,我发现它几乎在它所做的所有事情中都完全关闭:将每个请求包装在 POST 中(从而破坏了基本的 Web 功能),使用 JSP,但需要使用特殊标签一切,甚至是纯 HTML……我读了很多,在 JSF 阵营中有所改进,但我不能说,我再也没有看过它。)

【讨论】:

  • 哦,对于所有没有说“使用 JSF 和 STFU”或“看看这个 T5 火焰诱饵”的答案,匿名投反对票。叹息。
  • +1,因为这不值得被否决。很奇怪。
  • Tapestry 的魔法不可怕吗?遇到问题怎么办,处理很多魔法容易解决吗?
【解决方案2】:

接受你的提议并推销另一个框架:

如果您想要真正快速开发,那么您应该查看Play Framework

我使用过 JSF/Richfaces/Seam/Hibernate 等,我认为使用 Play 可以使您的工作效率提高一倍以上。没有部署周期。所以没有开发人员停机时间。它包含 JPA/Hibernate 以及许多将其功能扩展到其他方向的插件。

我也喜欢它使您的页面如此轻量的事实。我对 JSF 的最大问题始终是页面的重量(不必要的 ID、大量表、客户端状态等)

花点时间观看网络广播。

【讨论】:

  • Play 赢得了 DevDerpy,超越了 asp.net、ruby、php 团队。 Play 是我见过的最好的 Java web 框架,它是一个完整的堆栈,并且还具有 1st class scala 支持。插件和模块系统、测试系统、自动编译、rest、缓存、日志记录、webservice 支持、jpa、mongo 模块、guice 和 spring 模块、groovy 模板系统、超级错误报告、你无法相信的最简单的框架、crud/admin / 安全模块,数据库版本控制,......它接近完美。
  • 我会接受这个,因为 Play 很酷。
  • 我也喜欢游戏框架。很容易写一个休息服务。我的客户端只有 Jquery/Javascript 调用 .ajax 来获取 json 文本。
【解决方案3】:

查看我在 Jazoon 2010 上的演示文稿JSF 2.0 vs. Tapestry 5: A head-to-head comparison。这可能有助于您做出决定。

作为 Tapestry 提交者,我建议您选择 Tapestry,但我认为做出决定的最佳方式是两者都试一试。需要更多演示应用程序?

https://github.com/drobiazko/tapestry5inaction/tree/master/tlog

对我来说,Tapestry 5 最重要的特性是框架的灵活性。借助 Tapestry IoC,您几乎可以覆盖 Tapestry 核心中的每一段代码。

【讨论】:

  • 那么这对日常开发人员有何帮助?我不认为只想使用框架的开发人员真的需要覆盖框架部分。他会吗?
【解决方案4】:

不要向我寻求公正的意见...... Tapestry 多年来一直是我的生活,我仍然喜欢它。

话虽如此,学习曲线正在变得不那么陡峭,文档正在迅速改进,而 Igor 的书指日可待。

一些让人们感到困惑的事情仅仅是缺乏文档;例如,命名约定是可选的,总是有一些人更习惯的更明确的配置(以方法注释的形式)。

解决几个 Henning 点:

Tapestry 组件模板在设计上是静态的(这对 Tapestry 的可扩展性和集群性非常重要)。但是,我的 TapX 库中的一个插件支持填补空白的动态外部模板。

另外,如果您想最大限度地保留模板,您也可以这样做,例如:

...在模板中,其余部分在 Java 类中:

@Component(parameters={"zone=target", "clientValidation=blur", “上下文=客户端”,“安全=真”) 私人表格 myForm;

.... 换句话说,所有 Tapestry 特定的内容都从模板中移出并进入代码。不适合琐碎的组件(更多地在模板和 Java 源代码之间来回切换),但非常适合保持世界的美好和独立。

【讨论】:

  • “Tapestry 组件模板在设计上是静态的(这对于 Tapestry 的可扩展性和集群性故事非常重要)” - 1) “静态”到底是什么意思? 2) 这究竟对可扩展性和集群性有何帮助?
【解决方案5】:

我对 Tapestry 非常满意。这是一种不同于大多数人习惯的方法。它使用许多与 WebObjects 相同的范例(iTunes 商店的基础)。

Tapestry 在最大限度地减少完成任务所需编写的代码量方面做得非常好。一旦您知道自己在做什么,这很好,但是当您学习命名约定时,一开始可能会令人沮丧,因为有些东西似乎神奇地起作用,而另一些东西则不会,因为您命名错误。

我最喜欢 Tapestry 的一个特点是只需要很少的 XML。例如,如果您创建一个 Hibernate 实体,则将其放在 com.example.entities 包中并为其提供 @Entity 注释。不需要其他配置——不需要 XML,不需要将类名添加到某个文件中,等等。

我强烈建议您查看实际代码以了解您的想法。以下是一些建议:

wookicentral.com/ github.com/spreadthesource/wooki

tapestry.zones.apache.org:8180/tapestry5-hotel-booking/ github.com/ccordenier/tapestry5-hotel-booking

还可以查看 jumpstart 站点。它包含许多示例以及向您展示如何使用大多数各种组件的代码。它还包含一个起点应用程序,如果您想在此基础上创建应用程序,该应用程序可为您提供一些用户管理功能。

jumpstart.doublenegative.com.au/jumpstart/

还可以查看修改后的 Tapestry 文档。它还没有发布在主站点上,但它已经向前迈出了一大步:

people.apache.org/~uli/tapestry-site/

【讨论】:

    【解决方案6】:

    使用 JSF 2,尤其是在使用 Java EE 6 特性的情况下。如果您想拥有精美的 UI,请尝试Primefaces

    根据您的要求,要考虑的重要部分是您使用的是 MySQL,仅此而已。因此,从不同的角度来看。您正在使用 JPA2(在这种情况下,您的持久性提供程序恰好是 Hibernate)。使用这种方法,您可以快速轻松地“交换”您正在使用的持久性提供程序或数据库。

    看起来 Java EE 6 解决了这个问题。

    【讨论】:

      【解决方案7】:

      这是 Tapestry 5 和 JSF 2 的一个很好的比较

      http://blog.tapestry5.de/wp-content/uploads/2010/06/JSF-2.0-vs-Tapestry-5.pdf

      请注意,这是由 Tapestry 5 提交者 Igor Drobiazko 整理的

      【讨论】:

        【解决方案8】:

        I love this question about Tapestry。也许它会影响你的决定。

        【讨论】:

        • 是的,这个问题几乎 100% 与 Tapestry 4 相关。谢谢。 Tapestry 5 怎么样?
        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 2013-09-17
        • 2011-05-12
        • 2012-03-25
        • 2011-10-30
        • 1970-01-01
        • 2010-09-07
        • 2011-06-13
        相关资源
        最近更新 更多