当可以使用诸如jQuery和AngularJS之类的JavaScript库实现UI时,JSF有什么需要?


115

我正在阅读有关JSF的信息,它是一个UI框架,并提供了一些UI组件。但是,它与jQueryUI,AngularJS,ExtJS甚至纯HTML,CSS和JavaScript中可用的组件数量相比有何不同?

为什么有人应该学习JSF?


3
服务器生成的html的优点:搜索引擎的可搜索性,基于授权隐藏视图。否则,我们将其放弃用于纯ajax ui。
尼尔·麦圭根

5
我也放弃了JSF,转而使用AngularJS + RESTful后端。(苹果和橙子,但是Angular很好,我不需要JSF的许多好处)
arg20 2013年

JSF是基于组件的MVC框架,该框架建立在Servlet API之上,并通过可在JSP或任何其他基于Java的视图技术(例如Facelets)中使用的标记库提供组件。
Divyesh Kanzariya

Answers:


153

从JSF到纯JSP / Servlet / HTML / CSS / JS就像从jQuery到纯JS:用更少的代码做更多的事情。以PrimeFaces(基于jQuery + jQuery UI)为例,浏览其展示以查看完整的代码示例。BootsFaces(基于jQuery + Bootstrap UI)也展示了完整的代码示例。如果仔细研究这些示例,将会发现您基本上需要一个简单的Javabean类作为模型,并需要一个XHTML文件作为视图。

请注意,您不应将JSF视为单独的HTML / CSS / JS的替代品,还应考虑服务器端部分(特别是:JSP / Servlet)。JSF消除了收集HTTP请求参数,转换/验证它们,更新模型值,执行正确的Java方法进行业务工作以及生成HTML / CSS / JS样板代码的所有样板工作。使用JSF,基本上可以得到一个XHTML页面作为视图定义,一个Javabean类作为模型定义。这大大加快了开发速度。

与每个基于组件的Web MVC框架一样,在JSF中,您对呈现的HTML / CSS / JS的控制较少。添加自定义JS代码并不是那么容易,因为您还必须考虑服务器端的JSF视图状态(例如,在JS端启用禁用的按钮将不会在JSF端启用该按钮。巨大的安全优势)。但是,如果这是一个主要的突破,那么,那就寻找一个基于动作的Web MVC框架,例如Spring MVC。你只考虑你必须编写所有的HTML / CSS / JS代码自己。同样,如果您从Facelets退回到JSP,您也会错过高级模板功能。

另一方面,如果您有一个大型的基于JSP / Servlet / HTML / CSS / JS / jQuery的网站,并且希望将重复的JSP / Servlet / HTML / CSS / JS / jQuery样板代​​码重构为可重用的组件,则解决方案之一就是JSF。自定义模板,标记文件和组件可以帮助实现这一目标。从这个角度来看,JSF高于JSP / Servlet / HTML / CSS / JS / jQuery(这也是为什么在涉足JSF之前了解这些基础非常重要的原因)。

您可以在此处找到基于JSF的真实启动项目:Java EE Kickoff App。您会看到它旁边的JSF包括良好的HTML5CSS3jQuery

也可以看看:


15
用更少的代码做更多的事情?但是有了更多的xml ...这是一个折衷...此外,它还使您感到灵活性
Danubian Sailor

33
在JSF 2.0+中,不需要xml。
Cagatay Civici 2012年

5
我们有批注在JSF 2.0
VdeX

1
对于JSF,业务/控制器层和视图之间似乎没有清晰的界限,因为视图的大部分是在服务器上生成的。我了解所有内容都在发送到浏览器之前在服务器上进行了编译,但是我更喜欢Java对象返回视图呈现的数据,而不是发送呈现逻辑/数据。
里克(Rick)2015年

1
同意JSF是服务器端的东西,具有对HTML的强大控制。
Plain_Dude_Sleeping_Alone

28

创建JSF的目的是为了使Java商店不必学习诸如jQuery之类的东西,也不必构建复杂的JS,而是专注于纯Java堆栈。在时间就是金钱的世界上,许多地方已经开始专注于Java开发,减少一种语言/语言堆栈就可以使培训和维护变得更快,因此更便宜。

我要补充一点,JavaScript很容易成为大型团队的维护噩梦,尤其是如果该项目中的某些开发人员对网络的了解不多的话。


因此,如果对JQuery JS等非常满意。我不必专心JSF吗?
sushil bharwani 2010年

2
这完全取决于您要解决的问题以及您与之合作的团队。
安德鲁·怀特2010年

1
我同意团队的意见,但是我有兴趣了解JSF可以解决哪些问题以及js jQuery等不能解决的问题。只是试图增强学习JSF的动力。
sushil bharwani 2010年

1
没有,它只是提供了解决相同问题的一种方法。
安德鲁·怀特

8
即使您真的对JQuery感到满意,JSF仍然非常有用。它提供了一种将服​​务器端代码连接到客户端表示的简便方法。一些Facelets的“复合组件”只是HTML和JS(包括JQuery)的一个很薄的包装。它们很容易构建,并且通常使整个客户端-服务器端连接方式更容易。
Arjan Tijms 2010年

23

使用Javascript和诸如jQuery的框架,您将具有完全的灵活性和完全的控制权。使用ext等,您将失去很多控制权,必须适应框架。使用JSF,您将完全失去控制,必须完全适应框架。您在生命周期等中被调用,最后您无法控制何时可以调用服务器以及在哪里不能调用服务器。如果您要做被认为是“特殊”的事情,那么您将处于非常困难的境地。在JSF世界中,即使是诸如多列表排序之类的基本内容或只能键入有限字符集的字段(例如number字段)也被视为“特殊”。

但是,您拥有的灵活性越多,可以犯的错误或不良做法就越多。高灵活性仅适用于高度聪明的程序员,其他人则将项目变成难以处理的噩梦。

但是,由于JSF及其有限的灵活性,总是只有少数(甚至只有一种)正确的方法来做某事。您非常有限,不能创建快捷方式,必须编写更多的XML等。但是,在适应标准时,可以更好地控制那些没有经验或技术水平低下的程序员所编写的代码。结果,大公司喜欢JSF,因为它对他们来说“更安全”。

当我从GWT迁移到JSF时,我感到震惊,有多少对我来说很自然的事情被认为是非常不典型的,有多少简单的事情很难做到。而且,即使进行最小的更改,例如在标签后添加“:”符号,在GWT / jQuery支持的应用程序中,这将更改一个函数生成标签,需要更改数十个具有本地化属性的文件,甚至没有考虑除了我以外,其他任何人都...


7
PrimeFaces基于jQuery,因此您在客户端具有很大的灵活性,PrimeFaces组件还在客户端和服务器端提供了许多挂钩,以供您自定义事件回调。可以覆盖Javascript API和CSS,以实现自定义外观。:可以在web.xml中全局配置label,以使jQuery更友好。
Cagatay Civici 2012年

1
同意 一般规则是:不使用框架需要高级javascript编程,并且难以维护,但功能和复杂性大大提高,而对框架的依赖将更易于构建和维护,但会限制应用程序的潜在容量。
KTys 2014年

10

使用JSF的好处不仅在于生成xhtml + css + js。有时,像任何基于组件的框架一样,JSF会对您可以生成的标记施加限制。但是JSF不仅为此,它的生命周期也提供了极大的帮助。验证输入后,它可以轻松更新模型并同步服务器端bean。您只要说“无论用户在此处键入什么,请检查它是否是数字,如果是,然后将其存储在对象XX的YY属性中”,JSF就会执行所有操作。

因此,是的,您仍然可以使用JQuery,JS等。但是,在编写服务器端代码时,JSF提供了许多好处,并且使您免于繁琐的工作。


9

我强烈不同意jsf添加了任何内容。它只会增加开销。我在服务器上做过ui操作是我听过的最荒谬的事情。大型团队中的javascript效果很好-称为重用代码。

只需将jquery包裹在一些jsp标记中,这就是您需要做的所有事情,并且不让.jsf和richfaces遇到.shackles和可伸缩性问题。


14
JSF面向基于表单的应用程序。jQuery很不错(哎呀,许多流行的JSF组件库,例如PrimeFaces,RichFaces和IceFaces甚至在幕后使用它),但是jQuery并没有以任何方式简化在服务器端提交表单的处理。使用纯JSP / Servlet只会导致糟糕的样板代码。同样,JSF不仅是HTML / CSS / JS,而且还是JSP / Servlet。
BalusC

2
我认为,如果您总体上以及特别是在JSF页面的生命周期上阅读有关JSF的更多信息,您可能会改变主意。再说一次,您可能没有。
艾哈迈德·安瓦尔

5

与JSF,Spring MVC,Struts,Grails,JQuery和ExtJS一起工作后,我认为Grails + ExtJS是一种强大的组合。

我有一天会选择Grails而不是JSF。我喜欢ExtJS作为客户端框架和库的完整性,但它的学习曲线比JQuery陡峭。


3

以下是jQuery和JSF之间的最大区别:

  • 没有MVC架构
  • 没有状态控制(在会话或对话中存储日期,自动清理等)
  • 否(默认)验证库
  • 没有模板库
  • 没有高级导航/路由
  • 客户端

jQuery从未打算用作全栈Web框架。它更适合用于替换低级JS代码,从而使JS编写变得更轻松,功能更强大,并且代码行数更少。

因此,它应主要用于在HTML元素上添加行为。


2

在将ExtJS框架用于大型Web应用程序之后,我知道它的使用非常简单。ExtJS(Schena)最适合MVC体系结构中的(Oracle 11g)数据库交互。该视图用于视觉/用户交互。控制器从PLSQL包(CRUD的API,SQL选择查询等)中指定了“处理”和需要使用的触发器。使用模型和存储文件将数据项“映射”到查看器/输入。

ExtJS不适合非数据库密集型Web界面-Angular JS可能更适合。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.