本文参考
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2630
http://www.jdon.com/idea/jsf-struts.htm
JSF 体系结构是一种 Web 应用程序框架。它是 Java Community Process (JCP) 推动的,有望成为 Web 应用程序开发的标准框架。目前用于开发 Web 应用程序的框架有 50 多个,这说明迫切需要实现框架的标准化,这正是 JSF 框架的目标!
JSF与STRUTS的一个主要区别:
当我们需要监听Jsp页面表单中的input字段时,Struts只能通过JS绕弯实现,而JSF可以直接实现。
<h:inputText id="userId" value="#{login.userId}"> <f:valueChangeListener type="logindemo.UserLoginChanged" /> </h:inputText>
#{login.userId}表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以现,name="login" property="userId"
关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged processValueChanged(...)方法。
JSF可以为组件提供两种事件:Value Changed和 Action. 前者我们已经在上节见识过用处,后者就相当于struts中表单提交Action机制,它的JSF写法如下:
<h:commandButton id="login" commandName="login"> <f:actionListener type=”logindemo.LoginActionListener” /> </h:commandButton>
JSF是通过Listerner这样观察者模式贴在具体组件字段上的,而Struts此类事件是原始的一种表单提交Submit触发机制。如果说前者比较语言化(编程语言习惯做法类似Swing编程);后者是属于WEB化,因为它是来自Html表单,如果你起步是从Perl/PHP开始,反而容易接受Struts这种风格。
从网页设计人员的角度来看 ,JavaServer Faces提供了一套像是新版本的HTML标签,但它不是静态的,而是动态的 ,可以与后端的动态程序结合,但网页设计人员不需要理会后端的动态部份,网页设计人员甚至不太需要接触JSTL这类的标签,也可以动态的展现数据(像是动态的查询表格内容),JavaServer Faces提供标准的标签,这可以与网页编辑程序结合在一起,另一方面,JavaServer Faces也允许您自定义标签。
从应用程序设计人员的角度来看, JavaServer Faces提供一个与传统应用程序开发相类似的模型(当然因某些本质上的差异,模型还是稍有不同),他们可以基于事件驱动来开发程序,不必关切HTTP的处理细节,如果必须处理一些视觉组件的属性的话,他们也可以直接在整合开发环境上拖拉这些组件,点选设定组件的属性,JavaServer Faces甚至还为应用程序设计人员处理了对象与字符串(HTTP传送本质上就是字符串)间不匹配的转换问题。
若要全盘了解,其实JavaServer Faces是复杂的,每一个处理的环境都值得深入探讨,所以学习JavaServer Faces时,我选择从使用的角度来了解,这样花费的心力少一点。