Java-EE:更清晰,更简单的JSF替代品

时间:2011-06-10 13:45:08

标签: java java-ee

我们开始使用Java EE 6开发Web应用程序。

我们对JSF生成的HTML的复杂性感到惊讶。我的意思是即使是一个简单的链接也有一些javascript处理代码。在我看来,这是一个可用性问题,因为浏览器的手势(如链接上的“ctrl + click”)根本不起作用。此外,我怀疑当我们需要维护代码或使用jQuery等javascript框架调整UI设计时,这可能会变得更糟。它重新组合我:Webforms与ASP.Net MVC。复杂性与简单性有关。

无论如何这是我第一次使用JSF。所以我真的很想看看你的经历。

你知道一个更简单的Java EE渲染引擎吗?

您对JSF的开发经验如何?

您是否使用JSF和许多jQuery / Dojo / Script.aculo.us开发了一个Web应用程序?

5 个答案:

答案 0 :(得分:22)

当您询问“更简单的渲染引擎”时,很难定义“简单”的含义。 JSF是一种非常独特的动物,我担心在Java世界中没有任何更简单的东西。

我对JSF的经验非常积极,这来自于在ASP.NET下开发多年经验的人。学习曲线仍然很陡峭,如果没有某种形式的自定义Javascript甚至可能是自定义组件,我无法想象复杂的企业系统是可能的,但在我看来,它比更简单比ASP.NET和<强大>重量轻得多。他们解决了很多使ASP.NET难以使用的问题(例如,DOM的简单客户端ID,符合XHTML)。

我最近开发了一个应用程序,很快就会使用Primefaces组件,标准Mojarra facelets,一个自定义组件以及一些Javascript /隐藏输入字段解决方案来解决组件框架错误。除了我需要实现的一些解决方法之外,它非常容易。我对结果非常满意,利益相关者喜欢它,我将在下一个项目中再次使用它。

在制定团队时,我的真实世界经验告诉我,最好将经验丰富的Web应用程序开发人员作为项目的负责人,具有Javascript,CSS和Java Web技术方面的超级经验。团队的其他成员可以是入门级开发人员,并提供一些指导。

答案 1 :(得分:18)

我一直在与一个大项目的JSF合作。我有使用JQuery,普通HTML / css / javascript,GWT和Gxt的经验。我可以告诉你,JSF是最糟糕的。如果您希望您的后端代码与您的前端代码分离并独立,则JSP不是您的选择。它将你的前端与后端绑在一起,没有明确的关注点分离。 JSF的另一个问题是很难理解它。使用前端技术(例如javascript,html和css)创建出色的AJAX页面非常简单。我14岁的儿子被教会如何在学校做到这一点。使用JSF获得相同的效果非常复杂。看看如何定义链接:<h:commandLink value="New" immediate="true" action="#{projectUiService.showProjectCreate}" />。并且无法指定表单操作URL。您必须使用JSF托管bean和导航语义。这是一种全新的前端语言。因此,即使您想要设计前端或添加JQuery,您也会被填充。

配置构建和运行时环境也很痛苦。 jar文件之间有很多相互依赖关系,如果你没有正确的JSF,Richfaces和Spring Jars组合,那么你就没有希望让你的应用程序在构建环境之外。如果您想获得此提示,请转到maven搜索网站并查找课程javax.faces.component.UIViewRoot。每个人和他们的狗都拥有它。另请注意javax.faces和com.sun.faces - 有什么区别?谁知道,但他们不一起工作。某些版本仅适用于特定版本的RichFaces。

我的建议 - 保持清醒。为您的应用提供一个弹簧后端和一个普通的HTML前端。你无法在JSF中编写一个像样的大型企业级应用程序。这太复杂了。你最终会得到一个几乎不可能维护的庞大的整体代码库。

答案 2 :(得分:7)

您真的需要像JSF这样的基于组件的框架,还是在寻找更传统的基于Web请求的MVC框架?如果是这样,您可能需要查看Apache Struts2Spring MVC。 Spring MVC要求您使用核心Spring库。

答案 3 :(得分:6)

我已经和JSF合作了3年,我可以说最强大的是它抽象了浏览器(表单输入或操作)http请求和Java之间的通信。
JSF提供了丰富的库,例如:ICEfaces,RichFaces,ADF Faces,PrimeFaces,它们为您提供了大量丰富的组件,可能对您有用。
JSF尝试使Web应用程序的开发更接近桌面应用程序。它解决了Web应用程序最常见的任务(无论是哪种技术),并使用LifeCycle自动化它们。
但是,如果您希望在某些情况下某些行为与组件的工作方式不同,则必须制作一些解决方法,或构建自己的组件(除了复合组件外,可能很难)。
我已成功集成JS以完成任务,这些任务不需要在Java中触发某些操作,例如选择所有复选框,隐藏/显示页面的某些部分,等等。
JSF非常简单,但功能非常强大,并且需要一定的专业知识来完成某些任务 最后一个版本的JSF,2.0,解决了JSF的常见问题,因为它具有POST性质,所以现在我对它非常满意。
对于用户手势如ctrl + click,JSF中的Web应用程序的工作方式与正常情况略有不同,按钮后退,前进,刷新有时可能无法正常工作。但是,great,优秀的Web应用程序具有相同的行为:在PayPal中尝试Ctrl +单击..或尝试Vodafone.ro中的后退按钮
如果要完全控制HTML,请使用纯JSP。但是当你有一个巨大的Web应用程序时,JSF是快速应用程序开发(RAD)的一个很好的选择。

答案 4 :(得分:1)

  

你知道一个更简单的Java EE渲染引擎吗?

JSF是主流Java EE中表示层最强大的技术。只有在引入“复合材料部件”之后才能成为现实。然而,鲜为人知的 HybridJava 解决方案功能不强,但比JSF简单。