我应该选择哪个框架 - Seam,Wicket,JSF或GWT?

kar*_*arl 20 java jsf wicket seam web-frameworks

我在讨论是否使用Seam,Wicket,JSF或GWT作为Java项目中表示层的基础.

我根据就业市场考虑因素,技术的新颖性以及其他SO用户的建议,将我选择的Java Web框架缩小到这个子集.

在决定这些因素时,我应该考虑哪些因素?

Mig*_*ing 34

自从2.0规范问世以来,我从版本1.4和JSF开始使用GWT.

GWT是一个客户端框架,它从Java生成JavaScript.您的架构将是纯客户端 - 服务器,这意味着:

  • 最好使用粗粒度服务
  • 前往客户端的所有对象都应该是完全可序列化的(这意味着没有延迟加载或OpenSessionInView模式)
  • 从GWT 2.0开始,你可以使用xhtml设计你的gui,这在设计和构造HTML方面要容易得多
  • GWT倾向于支持良好的架构,如果搞砸了,重构就不好
  • 完美的历史(浏览器后退按钮,可收藏的网址)支持很难,你可能需要自己动手,虽然很容易在前面破解一些东西

JSF是一个基于组件的框架,具有视图优先设计(如果您愿意,可以使用代码隐藏):

  • 做某种类型的webapps更有效(有状态,比如购物车)
  • JSF + Seam支持对话(想想类似于向导的页面,可以跨多个页面维护状态)
  • 可以实现OpenSessionInView,具体取决于您的堆栈.如果您将EJB用于服务/业务层,则可能不建议这样做
  • JSF2 对AJAX提供了极好的支持,并且像RichFaces这样的组件套件可以构建漂亮的webapps
    • 但是如果你想要精美的javascript行为,你将不得不写一些javascript
  • JSF跟踪客户端或服务器端的当前UI状态.这是网络流量或服务器内存之间的权衡.

恢复:

  • GWT更适用于需要最佳客户端性能的Web 应用程序(想想gmail).编写自定义组件(编写Java)很容易,因为服务器端只是服务层,所以在服务器端可以完全无状态.
  • JSF更适合大多数CRUD应用程序,它们更适合面向组件的东西:想想酒店/航班预订系统,带购物车的在线商店等等


dig*_*oel 18

我使用的唯一一个是JSF,所以我无法向你提供其他人的反馈,但这是我对JSF的看法.根据我的经验,当我们从JSP中的JSF转换为facelets中的JSF时,生活变得更加容易,因此我将专注于facelets.而且,看起来Seam和JSF并不是互斥的.

优点:

  • 创建facelets xhtml组件很简单,可以促进重用.
  • 使用内置标签的体面模板能力,如ui:insert,ui:include和ui:decorate
  • 通过faces-config简单访问Spring bean
  • 基于XHTML,因此不熟悉java的Web开发人员仍然可以有效
  • tomahawk/trinidad提供的好小部件库

缺点:

  • 仅发布请求.这可能使书签变得困难.
  • 不像GWT那样内置ajax-y,但如果与Seam一起使用,这可能是固定的

我不是JSF/Facelets的专家,所以我确信还有其他我错过了.希望其他人也会详细说明.

JSF 2.0更新:


jos*_*hua 15

感谢wicket家伙保持清醒并继续讨论.我是一个wicket用户,我喜欢它.我的主要原因是:

  1. 它是一个组件框架.我喜欢使用组件而不是整页.
  2. 当我处理java部分时,我可以让设计人员处理模板和页面

  3. 没有什么新东西需要学习.它的"只是java和只是HTML"

  4. 我喜欢它的ajax Fallback机制.如果浏览器上没有javascript支持,特别是在移动设备上,它会回归到简单的html,一切正常.
  5. 它缺乏xml配置是一个加号
  6. 它支持我在Web应用程序中想要的一切.例如验证,国际化,后退按钮支持和其他宁静URL

我以前的经验是GWT和JSF 1.0


rec*_*ell 10

Seam是一个应用程序框架,而不是一个表示层.它最初是为了使JSF减少痛苦而开发的,但是已经发展成为更通用的依赖注入框架.

我相信你可以使用Seam与JSF,Wicket和GWT.JSF的支持是初级和优秀的; 我不确定其他两个人的支持程度如何.

由于您的标准的重点似乎是您的技能的适销性,我建议通过Facelets尝试Seam和JSF.JSF是一个公认的标准,如果你使用Facelets,它实际上很有用.您可以通过Richfaces和Ajax4jsf获得灵活的AJAX功能.Seam通过JCP或多或少标准化.


Vol*_*man 7

我的经验是按时间顺序:

原始的小服务 - (是的,很多努力工作,但它是早期的,我们是渴望海狸!)

JSP - 我认为它出现的时候是beez neez(如果我们只知道;))

Echo - 令人敬畏的框架,但不适用于需要搜索引擎友好的页面(与GWT相同的问题)

Wicket - 令人敬畏的框架 - 开发人员完全理解OO的概念(与JSP和许多其他人不同),并将所有常用的OO细节应用于此框架.如果你欣赏'可重用性',如果你欣赏封装,如果你喜欢分离关注点,如果你想将你的模型绑定到UI代码而不必担心对象编组和其他这样的丑陋,那么这就是你的框架!

  • 我从来没有使用普通的servlet路由(不是用于html渲染)所以我不能对此表示赞赏.但我在构建Wicket应用程序方面有一些经验,现在(现在必须)使用JSF.哎呀,我多么希望回到Wicket.对于某些人来说,使用JSF可能更容易,但我更喜欢Wicket背后的简洁原则.简单的事情很容易做,更复杂的任务也不困难,因为API提供了覆盖默认行为的钩子. (2认同)