JSF基础
JSF主要组成部分
UI component
有状态的对象,注意有状态意味着后台保持着前台的状态,是不是有点类似C/S程序了?
Render
一直不太清楚应该如何翻译这个Render,“修饰”,“着色”,“呈现”,个人认为还是“呈现”更贴切一些,因为Render的职责就是将UI component“呈现”到一个媒介上面,媒介可以是PC的WEB浏览器、移动设备,甚至是保存到文件;
Validator
校验器,对一个UIInput的输入值进行校验,一个组件可以有多个validator,一个validator也可以用在多个Input组件上(Validator的重用)
Backing Bean
如何翻译?“支撑Bean”,有点类似Struts的Form,但是比FormBean又多了一些EventHandler的功能,比如一个UIInput就可以将其ValueChange响应映射为Backing Bean的一个方法。这就是EventListener。
Converter
任何一个好的Web框架都应该有好的类型转换机制,但是很多框架却忽视了这点。因为Web上提交、显示的内容其实都是String,而一个Application中不可能都是String的,肯定会有int, long, date等类型,这就涉及到一个将Convert from and to String的问题,另外Converter还可以进行扩展,以实现对相同数据的不同显示方式,比如在不同的Locale显示Date的格式问题。
Events and listeners
JSF使用了JavaBean的事件模型(JavaBean远不止简单的getter/setter那么简单,这是很多Java初学者对JavaBean的误解),在Swing中也用了这种机制。UIComponent产生Event,Listener可以被注册以监听这些事件。所谓注册,就是在JSF中,类似下面的代码实现:
<h:inputText valueChangeListener="#{myForm.processValueChanged}"/>
但是,这种事件的响应需要表单提交之后才能执行,具体原因,请参见我的另外一篇文章《JSF如何实现onblur之后的复杂逻辑校验》
Messages
这好像没有什么好说的,基本上和Struts等框架的Message概念相似,就是向用户显示的信息;
Navigation
导航机制,也就是Page→Action→Page的一个过程。和Struts的ActionForwarding类似,不过比Struts强大的一个地方在于:JSF可以使用EventListener实现执行完Backing Bean逻辑之后不导航到别的页面,而只是redisplay当前页面,且保持页面的状态。
深入理解这些概念对学习JSF很有帮助,另外下面这个类图也需要掌握:
一个好的框架,其OO思想非常重要,而OO思想的一个基本原则就是:该你做的,你把它做好,不该你做的,你就不要越权。其实OO思想已经超越了计算机技术的范畴,应该演变成一种哲学体系。