详细介绍JSF和MVC

开发 后端
本文详细介绍JSF和MVC,包括更丰富的MVC环境,JSF和MVC实现细节和示例应用程序。

一.JSF和MVC

JSF 是几年前学过的在 Java 平台上改进 Web 开发技术的课程的结果。这一趋势开始于 JSP 技术,这一技术很好,只是很容易在 HTML(和类 HTML)页面中混合 Java 代码。下一次提高是 Model 1 架构,它让开发人员将大多数后端代码放入 JavaBeans 组件中,然后用 <jsp:useBean> 标签将 JavaBeans 组件导入 Web 页面。这对于简单的 Web 应用程序工作得很好,但是许多 Java 开发人员不喜欢 JSP 技术这种与 C++ 特性(比如静态包含)的协作。所以引入了 Model 2 架构。

本质上,Model 2 架构是用于 Web 应用程序的 MVC 的打了折扣的版本。在 Model 2 架构中,控制器是由 Servlets 来表示的,而显示则委派给 JSP 页面。Struts 是一种简化的 Model 2 实现,其中的 Actions 代替了 Servlets。在 Struts 中,应用程序的控制器逻辑是与它的数据(由 ActionForms 表示)相分离的。对于 Struts 的主要抱怨是,它感觉上更像过程化的,而不像面向对象的。WebWork 和 Spring MVC 是另外两个 Model 2 架构,它们更加不像过程化的,在 Struts 的基础上有所改进,但是它们仍然没有 Struts 那样被广泛接受(或者没有那么成熟,有人可能对此有争议)。并且也不提供像 JSF 提供的那些组件模型。

关于大多数 Model 2 框架的实际问题是,事件模型太简单了(本质上是一个非常缩小的 MVC),这就给开发人员留下了太多的工作。更丰富的事件模型使得创建大多数用户期望的交互更加容易。像 JSP 技术一样,大多数 Model 2 也很容易利用 GUI 自定义标签来混合 HTML 布局和格式化,这些标签有点类似于组件。而有些 Model 架构(比如 Struts)出现分离行为与状态的错误,这让许多 Java 开发人员感觉自己是在进行 COBOL 编程。

二.更丰富的 MVC 环境

JSF 提供一个组件模型和一个比大多数 Model 2 实现更丰富的 MVC 环境。本质上,JSF 比 Model 2 架构更加接近于真正的 MVC 编程环境,尽管它仍然是一种无状态的协议。JSF 也比 Model 2 架构更方便构建更加细致的事件驱动 GUI。尽管 JSF 给了您很多事件选项(菜单项选择、按钮单击,等等),但是大多数 Model 2 依赖于更加简单的“请求接受”。

JSF 的良好调优的事件模型,允许您的应用程序与 HTTP 细节的联系更少,并简化了开发。通过使得更加容易将表示和业务逻辑移出控制器,以及将业务逻辑移出 JSP 页面,JSF 也在传统的 Model 2 架构上有了一些改进。事实上,简单的控制器类根本与 JSF 没有联系,这使得它们更加容易测试。与真正的 MVC 架构不一样,JSF 模型层不可能发出许多必须在多个视窗(viewport)中解决的事件;此外,我们仍然在处理无状态的协议,所以这是没必要的。用于更改或更新视图的系统事件几乎总是用户请求。

三.JSF和MVC实现细节

在 JSF和MVC实现中,mapping backing beans(映射支持 beans)在视图和模型之间调停。因此,限制 backing beans 中的业务逻辑和持久性逻辑很重要。一个常见的替代方法是,将业务逻辑委派给应用程序模型。在这种情况下,backing beans 也映射模型对象,其中视图可以显示它们。另一种选项是,将业务逻辑放在 Business 代表中,后者充当模型。

与 JSP 技术不一样,JSF 的视图实现是一个有状态的组件模型。JSF 视图包含两个部分:视图根和 JSP 页面。视图根是 UI 组件集合,这些组件维护 UI 的状态。与 Swing 和 AWT 一样,JSF 组件使用 Composite 设计模式来管理组件树(简单地说,容器包含组件,容器也是一个组件)。JSP 页面将 UI 组件绑定到 JSP 页面,并允许您将字段组件绑定到 backing beans 的属性(或者属性的属性),以及将按钮绑定到事件处理器和操作方法。
 
下面是一个从 MVC 角度来看的示例应用程序。

四.示例应用程序

1.问题描述:该例是一个简单的 计算器 应用程序。
创建该应用程序的目标是向终端用户呈现一个页面,让他/她输入两个数值。因此,该页面具有两个文本字段、两个标签、两个错误消息位置和一个 Submit 按钮。文本字段用于输入数值。标签用于标注字段。错误消息位置用于显示针对文本字段的验证或数据转换错误消息。

2.分析:
1)视图:存在二个 JSP 页面:
◆calculator.jsp,它呈现前面提到的 GUI;
◆results.jsp,它显示结果。
2)控制器(充当从模型到视图的粘合剂):一个叫做 CalculatorController 的托管 bean 充当 calculator.jsp 和 results.jsp 的 backing bean。
3)模型:Calculator类,负责实现两个数的加、减、乘、除的业务逻辑。

3.示例应用程序的MVC 视图:

应用程序的MVC

【编辑推荐】

  1. JSF应用程序的生命周期
  2. 简单介绍JSF生命周期
  3. 升级JSF1.2的艰难之旅
  4. JSF标记与JSTL标记混合使用
  5. 简述学习JSF小记
责任编辑:佚名 来源: JavaEye
相关推荐

2011-06-30 10:20:38

JSFMVC

2009-06-29 14:30:27

JSF技术

2009-06-26 11:24:15

Seam Remoti

2011-07-08 17:26:38

JSFStruts

2009-06-24 17:43:24

Struts和JSF

2009-06-23 13:55:17

JSF标签

2009-06-23 13:01:04

JSF应用

2009-06-22 14:13:08

JSF入门

2011-07-21 17:11:09

AjaxJSF

2009-06-24 10:47:55

JSF生命周期

2009-08-03 18:49:17

C#和Java

2009-09-02 09:44:01

JSP和JavaBea

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2009-07-03 11:21:43

Servlet和JSPJSP路径

2009-06-22 14:22:41

JSF和Tapestr

2009-06-26 13:48:57

G4JSFGWTJSF

2011-06-21 15:00:07

JAVAC++

2011-06-27 15:52:20

TITLEALT

2011-07-08 16:24:53

VOPO

2009-06-22 16:24:33

JSF框架中使用的设计
点赞
收藏

51CTO技术栈公众号