什么是IoVC
IoVC是
Inversion of View Control的缩写,意思是视图反转控制,是AOM的核心特性之一,IoVC实现了将对UI的控制力转移到ManagedBean中,UI完全不关心谁会来使用它本身,也不需要关心在上面所展现的数据内容是什么,从而实现了UI与控制逻辑的完全分离,简言之,IoVC是一种更高层次的MVC。
初一看,IoVC好像也没什么特别的,甚至有点概念炒作的嫌疑,但是真正使用它、理解它之后,你会发现,它所提供的编程模型为你的开发带来了实质性的帮助。
IoVC带来了什么
IoVC提供了“绑定”、“多语言支持”、“资源注入”、“逻辑事件”等特性,这些特性主要作用在ManagedBean上面,ManagedBean是位于UI与业务服务之间的协调者,基于这些特性,在ManagedBean中,一方面可以对UI实现完全的控制,另一方面,可以灵活自然的与业务服务进行交互。
托管Bean的简化
传统方式中,编写一个ManagedBean,需要编写faces-config.xml文件,例如编写两个ManagedBean,UserBean与DepartmentBean,其中UserBean需要引用DepartMentBean,需要采用下面的方式来声明faces-config.xml文件:
<managed-bean>
<managed-bean-name>DepartmentBean</managed-bean-name>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean-class>demo.DepartmentBean</managed-bean-class>
</managed-bean>
<managed-bean>
<managed-bean-name>UserBean</managed-bean-name>
<managed-bean-scope>session</managed-bean-scope>
<managed-bean-class>demo.UserBean</managed-bean-class>
<managed-property>
<property-name>departmentBean</property-name>
<property-class>demo.DepartmentBean</property-class>
<value>#{DepartmentBean}</value>
</managed-property>
</managed-bean>
IoVC提供了@ManagedBean、@ManagedProperty、@MapEntries、@ListEntries等关于ManagedBean定义的一整套完整的标签,上面的定义,在IoVC中将会转变为如下方式直接声明在代码中,无需维护faces-config.xml文件:
@ManagedBean
public class DepartmentBean
{
}
@ManagedBean
public class UserBean
{
@ManagedProperty("#{DepartmentBean}")
private DepartmentBean departmentBean;
}
关于IoVC剩余的几个特性的支持的描述,我将会陆续写一些文章来进行深入介绍。
在把“IoVC是什么、IoVC能够做什么”这些基本问题解释清楚后,我计划探讨一下“IoVC是怎么实现的?”,以及“为什么有了IoVC之后,组件的无状态就可以变成可能?”等问题。
绑定(Binding)
资源注入 (Injection)
多语言支持
逻辑事件
“无状态组件”的传说