Spring MVC vs JSF [重复]

Posted

技术标签:

【中文标题】Spring MVC vs JSF [重复]【英文标题】:Spring MVC vs JSF [duplicate] 【发布时间】:2011-01-16 00:31:48 【问题描述】:

我在过去的所有应用程序中都使用过 Struts 框架,而对于新应用程序,我的客户要求使用 Spring MVC 还是 JSF?我不熟悉这两个框架,但我们的时间表很严格。所以,我不确定我会选择哪个框架来构建应用程序。

谁能给我建议一下哪个框架容易快速学习?

谢谢

【问题讨论】:

感谢专家的解答。我现在也在考虑选择 Spring MVC 而不是 JSF。我们的网页设计师为我们提供了静态 html,我认为将静态 html 转换为 JSF 页面会很困难(因为它使用 UI 组件)。希望Spring MVC也能提供类似struts logic的标签:迭代.. 是的,如果您有来自网页设计师的 HTML 页面,那么将它们用于 Spring MVC 视图要比将它们转换为 JSF 组件要容易得多。至于标签——我想我通常只是为此使用了 JSTL c:forEach 标签。 Spring 标签库非常小 - static.springsource.org/spring/docs/2.0.x/reference/… - 但也使用了 JSTL 标签库 - 因为模型对象只是 POJO/JavaBeans JSTL 工作正常。 同意,在这种情况下。我个人更喜欢 JSF,因为它更适合我的编码风格,但在这种情况下,Spring MVC 可能会更好。 你会长期使用 Spring 堆栈的其余部分吗? 注意:我没有保护这个问题,因为这个问题是有效的,相反,我发现这个问题应该被删除。我保护它是因为我想防止新用户继续以不相关的主观性向这个问题发送垃圾邮件,从而继续滥用 Stack Overflow 作为讨论论坛平台。我已经对这个问题投了反对票并投了赞成票,因为它根本不属于这里。但是,接近投票已过期,显然没有其他人会担心这个问题出现在错误的地方。 【参考方案1】:

当然,每个人都会有所不同,但我建议使用 Spring MVC,因为它是一个像 Struts 一样的基于请求的框架。当然,您会想了解诸如控制反转/依赖注入之类的核心 Spring 内容(但我认为这是一个加号...)以及您将用于数据库访问的任何内容(只是 JDBC?Hibernate? iBatis?等)。

JSF 是基于组件的,这与基于请求的框架有点不同。如果您确实打算走 JSF 路线,我建议您查看 JBoss 的 Seam。它更像是一个从前到后的框架,使用 JSF 作为 web/presentation 端,使用 EJB 作为后端。几乎所有使用过它的人都声称它使 JSF 和 EJB 比单独使用时更有用。

不过,无论您选择哪种技术,祝您好运。 (听起来你会需要它——严格的时间表和指定 Web 框架的客户端?)

【讨论】:

仅供参考:JSF 2 具有 Seam 提出的一些不错的特性(会话范围、CDI),并且大量使用注释而不是 XML。它似乎比 JSF 1.2 和更早的版本更好用。【参考方案2】:

我建议使用 SpringMVC,因为时间限制:

您需要学习曲线不那么陡峭的东西。 SpringMVC 更像 Struts 而不是 JSF 要使用 JSF 的强大功能,您需要熟悉许多“技巧”,而 SpringMVC 或多或少是直截了当的

【讨论】:

这总结了一切:) - 为了使用 JSF 的强大功能,您需要熟悉许多“技巧”【参考方案3】:

我建议使用 JSF + Primefaces 组件库。我正在使用这种组合来构建我们的大部分项目。我记得,我花了一个星期的学习技术并在一个月内完成了我的第一个项目。开发时间比 Struts 至少快 30%。

SpringMVC 不是一个糟糕的技术,它很受欢迎。

真的取决于你最喜欢哪一个。

【讨论】:

我的团队为同样的决定苦苦挣扎了几天,才意识到 Primefaces(和 Primefaces Mobile)的真正强大之处。请注意,Primefaces 并不完美。我们不得不不时在 .xhtml 中编写一些 javascript 和 CSS hack,以适应浏览器呈现的差异。然而,主要是Primefaces,保持简单且强大的 - RAD是最好的。 span> 我会表达不同意见。 Primefaces是一个功能强大的库,但它的文档是Abysmal。我花了几周的攻击事物,这是痛苦的。我推荐 Spring,因为有更多可用资源,我绝对推荐使用 intellij 而不是 eclipse,并使用支持良好的应用程序容器,如 tomcat。【参考方案4】:

当然,您会想了解诸如控制反转/依赖注入之类的核心 Spring 内容(但我认为这是一个加分项......)

JSF 确实是基于 IoC 的,而且比 Spring 的学习曲线要​​简单得多。

【讨论】:

嗯,你能提供一个 JSF 使用 IoC 的例子吗? 是的,我想是 IoC。只是一个问题,因为您没有在上面的答案中澄清它;-) 顺便说一句,尽管我是 JSF 支持者,但我必须承认学习曲线可能会根据您以前的经验和知识而有所不同,不是吗? 示例:在 JSF 中,在一个 bean 中使用注解来注入其他 bean:假设 bean1 是 SomeBean1 的一个实例。在另一个 bean 中,使用 @ManagedProperty(value="#bean1")。将其放在将接受注入 bean1 的属性声明之前: private transient SomeBean1 refToBean1;或者,也可以在目标 bean 的 faces-config 中使用它:refTobean1#bean1【参考方案5】:

JSF 只是 MVC 的视图层,需要与 Spring/Hibernate 或 EJB 等其他技术一起使用才能获得完整的 MVC。

我已经使用 Spring MVC 大约 1 个月了,虽然它可能不是 SpringMVC 的最新版本,但我发现要处理这么多 XML 有点烦人。所有托管 bean 和 DAO 都有 XML 配置。此外,一切似乎都必须通过一个名为 onSubmit() 的方法。

在我看来,带有 EJB 之类的 JSF 要简单得多...一切都可以使用注释来完成,因此只需在支持 bean 中使用 @ManagedBean=theBean 并在 JSF 中放入 thebean.param 即可访问支持 bean 的数据。您还可以使用 EJB 的会话 bean 作为 JSF 的支持 bean,然后直接访问 DAO(模型层)实体 bean。再次简单地使用 @Entity 注释和 EntityManager 类

Spring MVC 是 Spring 框架内的一个 Web 框架。它确实提供了 JSF 2.0 中的特性: ajax 支持 验证 依赖注入等 但是,您可以将 Spring(不是 Spring MVC)与 JSF 2.0 一起使用,Spring 提供依赖注入、aop、事务管理机制,而 JSF 提供 Web 层。

【讨论】:

“带有 EJB 之类的 JSF 要简单得多……”不是真的。使用 SpringMVC,从 2.5 开始,应用程序可以选择注解驱动,并且可以通过最少的 XML 配置使用注解完成所有操作。 “我已经使用 Spring MVC 大约 1 个月了”如果您刚刚开始使用 Spring,您如何认为自己有足够的技能来权衡 Spring 和 JSF? (原文如此)“我发现我们有这么多 XML 需要处理,这有点烦人”显然不再是一个有效的论点。您可以使用注释在 Spring 中声明和挂钩所有组件(使用 v3 及更高版本)。双重性非常方便,因为您可以将“集中式”基于 XML 的配置元数据与代码中分布的注释混合,使用前者来 - 例如 - 在一个地方控制 dev/test/qual/prod 配置文件,并且后者来管理所有不依赖于运行时环境但源自您的核心组件架构的绑定。

以上是关于Spring MVC vs JSF [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用JSF作为Spring MVC的视图技术

xml 如果使用JSF作为MVC框架,则使请求和会话范围spring bean可用

JSF action vs actionListener [重复]

我们可以集成 JSF 2.0 + Spring 4.2.X + Spring Security 4.2.X [重复]

JBoss RichFaces vs IceFaces vs Apache Trinidad - JSF 组件库比较

java中的Web开发存在哪些Spring+JSF/Facelets的替代品?