This is huge. JSF has 6 objects that implement much of the framework's capabilities and you can easily replace those objects by decorating the default implementations. That makes it ridiculously easy, for example, to add your own custom variables to the JSF expression language. It also makes it easy, for example, to plug in your own view handlers, perhaps a view handler that implements Tapestry-like views so you can truly separate components and HTML. In fact, Shale, does both of those things. As if that weren't enough, JSF gives you numerous hooks into the JSF lifecycle to inject your own voodoo. Shale gives you even more.
#5: Event Model
JSF has an event model that lets you react to value changes, actions, and phase changes in the JSF lifecycle. In JSF 1.1, those events are handled entirely on the server, a sore point to be sure, but JSF 2.0 plans on supporting client-side events as well. Stay tuned.
#4: Value Bindings
With Struts, you are responsible for ferrying data from your forms to your model objects. You implement an action with an execute method that takes a form bean as an argument. Then you manually pull data out of that form bean and push it to your model. For every form in your application. Ugh. With JSF, you do this: #{model.property}. That's all. JSF takes care of the rest.
#3: Renderers
Have you ever looked at the source code for Struts tags? They generate HTML directly. JSF component tags, OTOH, don't generate anything; instead, they refer to a component-renderer pair on the server. The component maintains state whereas the renderer is in charge of rendering a view. The point here is that renderers are pluggable: you can replace the default renderers with your own implementations; for example, in my Felix talk at NFJS, I illustrate how to implement a custom label renderer that adds asteriks to labels that represent required fields. You plug in that renderer, and JSF will automatically use it throughout your application. Sweet.
#2: Render Kits
I had a Struts consulting job a few years ago where we had to support both a browser-based interface and radio frequency devices, and it was painful. That task would've been greatly simplified with JSF because you can create your own render kit?a collection of renderers for a particular display technology?and plug it into JSF.
#1: Components
Components are the number one differentiator between Struts and JSF. Like Swing, JSF provides a rich infrastructure for developing components in addition to a standard set of components. That infrastructure makes it relatively easy to create your own components and share them with others. Already, we're seeing custom components popping up all over the place, for example with Oracle's ADF and MyFaces, both of which provide a rich set of components such as JavaScript-powered calendars, trees, etc. Of course, components are only half the story; typically, components delegate rendering to a separate renderer, which provides substantial benefits (see item #3 above). But, as with most things in JSF, you are not forced to adhere to the party line. If you want, you can implement components that render themselves, although if you do so, you will loose the ability to plug a different renderer into your component.
Your liver pays dearly now
For youthful magic moments
But rock on completely with some brand new components
rock'n'roll lifestyle
from motorcade of generosity by Cake
Trackback URL: http://jroller.com/trackback/dgeary/Weblog/top_ten_reasons_to_prefer
本人的一些看法:
JSF和Struts都是杰出的MVC框架,JSF的设计者之一就是Struts的创始人。
Struts本人使用不多,只在一个project中用到,而且也仅仅是写了几个页面,那个project我主要做的是business layer部分。不过当时做struts时候感觉有时候真的很臃肿,每个有请求提交的页面都要对应一个actionform,每个actionform对应一个action类,觉得很麻烦。并且使用Struts所写的Action类和ActionForm类都依赖于Struts的API,不太符合编程优雅性的规则。而在JSF中,ActionForm和Action则被一个BackingBean所取代,该BackingBean是一个POJO(Plain Old Java Object),页面请求的处理及导航则通过BackingBean中一个简单方法调用就可完成。
记得在某篇文里面提到JSF对ajax的支持性不太好,而据我所知java.net的blueprint早就提出了JSF层面上AJAX解决的三种方案。值得一提的是Apache Myfaces的的sandbox,有兴趣的可以去看看示例,链接http://www.irian.at/myfaces-sandbox/home.jsf ,给出了一些基于ajax的jsf组件。
当然,由于JSF目前还算是比较新的框架技术,组件还在不断扩展和完善中,不过既然它是JEE 5.0的实现标准,我看好它的潜力。Facelets也使得web页面的模板化更加容易。自从jsf出现以后,struts阵营的不少人转向了jsf,比如Professional Struts的作者之一Rick Hightower。
国内不少java程序员对jsf持有抵制态度,毕竟学习一个新的技术框架需要时间,struts已经用了好多年了,用的很熟,干吗要放弃这个?我想说的是程序员就是生活在不断的学习中,为什么国外的软件人能写程序写几十年,而国内30岁之后的软件人还在写程序的少之又少。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/