前文我们曾经讲述了MVC设计模式是如何把应用程序分离为模型、视图和控制器三个部分。我们将业务逻辑和数据抽象放在模型层,UI部分属于视图层,而控制层负责两者的连接。在JSF中将UI和模型联系起来的就是“支持Bean(backing bean)”。支持Bean通常包含了你希望从用户那里获得的属性值,以及事件监听方法(随后我会介绍)。支持Bean负责处理这些属性值、控制UI或者执行一系列的应用程序逻辑。一些开发工具会在你创建一个新的页面时自动生成一个支持Bean。这些支持Bean通常被当作“web 窗体”或者“绑定代码”,从概念上来讲,它类似于ASP.NET中的“代码绑定”。但从根本上来说他们之间有很大的区别。
JSF允许你为UI组件定义一个支持Bean。通过定义的的方式,我们用标记的方式取代了编写代码的方式。你可以通过JSF的标记语言(EL)把UI组件和支持Bean关联起来。这种标记语言类似于JSP2.0和JSTL中的扩展标记语言。你可以使用JSF EL在应用程序的任何地方指定支持Bean。比如下面这个hello world的代码片段。
上面的代码显示,这个html文本框的值直接来自于一个名为hellBean的numControls的属性值。一旦UI组件的值发生变换helloBean的numControls属性值也会发生变化,两者保持同步。这一特性非常重要,你可以利用它来同步UI组件和支持Bean的值。
当然,你也可以利用支持Bean关联或者说绑定服务器端的组件。当你希望通过Java代码来控制组件时这个特性非常有用。比如hello world 应用有一个HtmlPanelGrid组件它绑定了一个HelloBean支持Bean。
columns="20" border="1" cellspacing="0"/>
上面的代码中使用了JSF EL 将这个组件绑定到helloBean的controlPanel属性上。这使因为支持Bean在后台已经直接映射了这个组件,它可以通过代码控制:
...
List children = controlPanel.getChildren();
children.clear();
在上面的代码中HelloBean的事件监听器方法从controlPanel组件中获得子项并把他们都从controlPanel移除掉,在下次显示页面的时候可以再次显示出来。
顺便提一下:
如果你认为JavaBean只能用户值对象(只有属性的对象),你应该注意,其实他们还可以作更多的事情。支持Bean是包含丰富的JavaBean ,它除了包含属性外还包含事件监听器方法,这些方法可以作用在这些属性上,甚至可以直接和UI组件关联,所以在必要的时候你可以直接控制界面UI。
一个页面可以同时有一到多个支持Bean,开发工具会直接创建绑定到UI组件的支持Bean。
支持Bean通常称为模型对象,或者叫助手类。它负责访问诸如数据库、web服务和EJB,或者执行应用程序逻辑,又或者用来描述诸如用户、用户参数、报告等。像支持Bean这样的模型对象可以直接使用JSF标记来指定为某个UI组件的值。比如你可能希望将一个用户对象的name属性关联到一个html文本框山。模型对象不是直接绑定到UI组件上,实际上,它于UI组件之间是透明的。
所以开发人员一般不会花大量的时间来编写支持Bean和模型对象,JSF提供了一种声明机制来创建他们,它称之为控制Bean创建工具(MBC)。它允许你指定在应用程序生命周期中那个对象将被激活。下面是hello world应用程序的另一个代码片段:
上面的代码告诉JSF 创建一个HelloBean的实例helloBean 并把它存储在session中。这就是将一个模型对象映射到UI组件上所要作的一切。任何使用这一方式的对象我们称之为控制beans。
理解控制Bean和模型对象之间的关系对于创建JSF应用程序来说是非常关键的。JSF框架的一个主要目的是让UI组件和模型对象之间的关联变得简单,随着更多的学习和使用你会逐渐明白这一点。
后文将对支持Bean进行更详细的讲解。
No comments:
Post a Comment