各种Java Web表示层技术的优缺点

我目前正在开发一个大量使用JSF和IceFaces的Web应用程序。 我们已经讨论过转移到另一个表示层,我想我会把讨论带到SO中,看看专家们的想法。

我很好奇是否有人可以权衡各种Java表示层技术的优缺点。 如果你只和一个人合作过,说出你喜欢它的原因或者讨厌它。 如果您与多个人合作过,请给出他们如何相互叠加的印象。

我们正在考虑的技术是:

  • ICEfaces的
  • JSF(没有IceFaces)
  • GWT(谷歌网络工具包)
  • 便门
  • 挂毯

如果我遗漏了我的清单中的任何内容,请告诉我。

谢谢!

我的意见非常偏向于Wicket,因为我曾经多次使用JSP挖矿后使用它一段时间。

Wicket PROs:

  • 真正分离布局和代码。
  • 基于组件,这意味着站点元素的高可重用性; 例如,您可以创建具有自动标签和CSS样式以及所有内容的美化表单,只需在组件的构造函数中更改它的DAO对象,它就可以在另一个项目中完全重用。
  • 对Ajax,Portlets和一般开箱即用的各种框架提供出色的支持,更重要的是它不依赖于slf4j / log4j以外的任何其他工作,一切都是可选的!

Wicket CONs:

  • 开发对于一般情况有一些混乱,Wicketgenerics现在有点乱,尽管它们已经在1.4中被清理了很多
  • 某些组件(如Form.onSubmit() )需要广泛的子类化或匿名方法覆盖,以便轻松地注入行为。 这部分是由于Wicket强大的基于事件的设计,但不幸的是,这也意味着很容易使代码混乱Wicket。

随机CONs 🙁也就是说,我没有使用,但这些是我听到的opionions和/或事情)

  • GWT是基于JavaScript的,对我来说听起来很愚蠢。 主要问题是它让我想起了JSP:s及其自动生成的类,它们非常糟糕。
  • Tapestry不会以一种可以在两者之间轻松validation的方式正确地分隔标记和代码,这将在将来引起问题。

我已经将GWT用于了几个小项目。 以下是我喜欢的一些内容:

  1. 默认情况下它是ajax,所以我没有必要让它做ajax,它只是使用GWT。
  2. 它与客户端代码有很好的分离。
  3. 我可以使用junit对我的客户端代码进行unit testing
  4. 它可以让你构建清晰,快速的应用程序,主要是因为它是ajax。

我不喜欢的事情:

  1. 有些东西没有按预期工作。 例如,我见过点击事件未按预期触发的情况,所以我不得不做一个解决方法。
  2. 自动部署到在eclipse中运行的tomcat有时会停止工作,我无法弄清楚原因。

我要问的最大问题是你为什么要更改表示层? 这是一个非常昂贵的成本,我可以看到一种技术的好处超过其他技术的成本与改变的成本一样多……

简而言之:

= JSF =

优点:

  • 组件架构;
  • 许多图书馆和工具;
  • 有点好的IDE支持

缺点:

  • 重量级,包括CPU /内存学习曲线;
  • 当某些东西不能按预期工作时,很难调试

= WICKET =

优点:

  • 轻巧;
  • 合理的模板系统;
  • 好的教程;

缺点:

  • 参考文档的组织和深度不如教程那么好;
  • 开发团队遇到了一些严重的困难,特别是在成长和孵化项目时。 这导致框架的重要方面混乱,那时我不得不切换到另一个框架因为这…

条纹怎么样?

我的选择是Wicket 。 使用它并提供出色的可重用性。 它拥有最具活力的论坛/邮件列表之一。 作为一个问题,它将在几分钟内得到解答。 它对AJAX有很好的支持。 归因于Wicket的一个常见缺点是陡峭的学习曲线。 那些是现在不再有价值的老年弊端之一。

JSF:最好远离它。 另一个开发了JSF项目的团队现在正考虑在我们成功之后转移到Wicket。

@Megadix:就像你说文档在开始时很差,但不再是。 Wicket的开发人员写了一本名为Wicket in Action的优秀书籍。 网站上提供的示例代码也是一个开始和学习的好地方

我想知道你是否有一个与Web客户端不同的服务层,Web控制器只是调用它来完成他们的工作。

如果这样做,Web UI技术的选择可以与后端分离。 如果它作为合同第一个Web服务公开,您可以让不同的应用程序共享它。 只要您的客户可以发送和接收XML,他们就可以与您的服务进行交互。 想切换到Flex? 不用担心 – 将其指向服务并呈现XML响应。

请参阅我对Wicket和Tapestry 5的比较: Apache Tapestry和Apache Wicket之间的区别 。