- 浏览: 136392 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tangzlboy:
非常详细,简单易懂!
Struts2入门 -
yeafee:
这里应该是原创了。从他处找来....
用Spring快速开发jms应用(JBOSS服务器) -
effort_fan:
借鉴了。谢谢。
jar命令的使用 -
yhanliang:
简直 就 是从 "李刚" 的 <&l ...
Struts2文件的上传和下载 -
kesun_shy:
哈哈哈啊~
把CSDN上的博客文章在这做了个导入
JSF和MVC
1. 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 编程。
2. 更丰富的 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)中解决的事件;此外,我们仍然在处理无状态的协议,所以这是没必要的。用于更改或更新视图的系统事件几乎总是用户请求。
3. 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 角度来看的示例应用程序。
4. 示例应用程序:
1. 问题描述:该例是一个简单的 计算器 应用程序。
创建该应用程序的目标是向终端用户呈现一个页面,让他/她输入两个数值。因此,该页面具有两个文本字段、两个标签、两个错误消息位置和一个 Submit 按钮。文本字段用于输入数值。标签用于标注字段。错误消息位置用于显示针对文本字段的验证或数据转换错误消息。
2. 分析:
1) 视图:存在二个 JSP 页面:
calculator.jsp,它呈现前面提到的 GUI;
results.jsp,它显示结果。
2) 控制器(充当从模型到视图的粘合剂):一个叫做 CalculatorController 的托管 bean 充当 calculator.jsp 和 results.jsp 的 backing bean。
3) 模型:Calculator类,负责实现两个数的加、减、乘、除的业务逻辑。
3. 示例应用程序的MVC 视图:
4. 构建应用程序:
1) 创建名为calculatorApp的web应用程序:并配置好JSF环境
2) 创建业务逻辑类:Calculator.java
package org.qiujy.service;
/**
*计算器业务逻辑类
*@authorAdministrator
*/
publicclass Calculator {
/**
*加法运算
*@paramafirstNumber
*@parambsecondNumber
*@returnresult
*/
publicdouble add(double a, double b){
return a + b;
}
/**
*减法运算
*@parama
*@paramb
*@return
*/
publicdouble subtract(double a, double b){
return a - b;
}
/**
*乘法运算
*@parama
*@paramb
*@return
*/
publicdouble multiply(double a, double b){
return a * b;
}
/**
*除法运算
*@parama
*@paramb
*@return
*/
publicdouble divide(double a, double b){
return a / b;
}
}
|
3) 创建控制器(受管Bean)来粘接模型和视图:CalculatorController.java。
控制器的目标是充当从模型到视图的粘合剂。Controller 对象的其中一个功能是保持模型对于视图技术不可知。正如从下面可以看到的,控制器指定三个 JavaBeans 属性,这些属性将用于收集输入和显示结果。这三个属性是:results(输出)、firstNumber(输入)和 secondNumber(输入)。Controller 也呈现四个操作,它们委派给 Calculator 对象中相同名称的操作。
package org.qiujy.controller;
import org.qiujy.service.Calculator;
/**
*受管Bean
*
*@authorAdministrator
*
*/
publicclass CalculatorController {
/** Representthemodelobject.*/
private Calculator calculator = new Calculator();
/**Firstnumberusedinoperation.*/
privatedoublefirstNumber = 0;
/**Resultofoperationonfirstnumberandsecondnumber.*/
privatedoubleresult = 0;
/**Secondnumberusedinoperation.*/
privatedoublesecondNumber = 0;
public Calculator getCalculator() {
returncalculator;
}
publicvoid setCalculator(Calculator calculator) {
this.calculator = calculator;
}
publicdouble getFirstNumber() {
returnfirstNumber;
}
publicvoid setFirstNumber(double firstNumber) {
this.firstNumber = firstNumber;
}
publicdouble getResult() {
returnresult;
}
publicvoid setResult(double result) {
this.result = result;
}
publicdouble getSecondNumber() {
returnsecondNumber;
}
publicvoid setSecondNumber(double secondNumber) {
this.secondNumber = secondNumber;
}
/**
*Addsthefirstnumberandsecondnumbertogether.
*@returnnextlogicaloutcome.
*/
public String add() {
result = calculator.add(firstNumber, secondNumber);
return"success";
}
public String subtract() {
result = calculator.subtract(firstNumber, secondNumber);
return"success";
}
/**
*Multipliesthefirstnumberandsecondnumbertogether.
*@returnnextlogicaloutcome.
*/
public String multiply() {
result = calculator.multiply(firstNumber, secondNumber);
return"success";
}
public String divide() {
result = calculator.divide(firstNumber, secondNumber);
return"success";
}
}
|
4) 在faces-config.xml文件中声明受管Bean和导航规则:
<managed-bean>
<managed-bean-name>CalcBean</managed-bean-name>
<managed-bean-class>
org.qiujy.controller.CalculatorController
</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
|
上面的配置告诉 JSF,您想要将一个 受管bean 添加到叫做 CalcBean 的 JSF 上下文。您可以向自己的受管 bean 调用任何事情。
<navigation-rule>
<from-view-id>/calculator.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/result.jsp</to-view-id>
</navigation-case>
</navigation-rule>
|
上面的导航规则指出,如果一个操作从 /calculator.jsp 视图返回逻辑结果“success”,那么就会将用户转向 /results.jsp 视图。
5) 创建calculator.jsp和result.jsp:
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head>
<title>My JSF 'calculator.jsp' starting page</title>
</head>
<body>
<f:view>
<h:form id="calcForm">
<h:panelGrid columns="3">
<h:outputLabel value="第一个数" for="firstNumber" />
<h:inputText id="firstNumber" value="#{CalcBean.firstNumber}"
required="true" />
<h:message for="firstNumber" />
<h:outputLabel value="第二个数" for="secondNumber" />
<h:inputText id="secondNumber" value="#{CalcBean.secondNumber}"
required="true" />
<h:message for="secondNumber" />
</h:panelGrid>
<h:panelGroup>
<h:commandButton id="submitAdd" action="#{CalcBean.add}"
value="加" />
<h:commandButton id="submitSubtract" action="#{CalcBean.subtract}"
value="减" />
<h:commandButton id="submitMultiply" action="#{CalcBean.multiply}"
value="乘" />
<h:commandButton id="submitDivide" action="#{CalcBean.divide}"
value="除" />
</h:panelGroup>
</h:form>
</f:view>
</body>
</html>
|
命令按钮使用 action="#{CalcBean.add}" 将按钮绑定到 backing bean 上的一个方法。因此,当用按钮提交表单时,关联的方法就会被调用。
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<head>
<title>My JSF 'calculator.jsp' starting page</title>
</head>
<body>
<f:view>
第一个数: <h:outputText id="firstNumber" value="#{CalcBean.firstNumber}" />
<br />
第二个数: <h:outputText id="secondNumber" value="#{CalcBean.secondNumber}" />
<br />
结果: <h:outputText id="result" value="#{CalcBean.result}" />
<br />
</f:view>
</body>
</html>
|
6) 部署,调试:
源码:
发表评论
-
JSF简介
2007-10-19 20:36 1234JSF简介 一、 什么是 JSF ... -
JSF表达式语言
2007-10-19 20:47 2772JSF表达式语言 JSF的表达式语言(EL)的形式跟jSP的表 ... -
JSF验证器和转换器
2007-10-19 20:48 3246JSF验证器和转换器 ... -
jsf学习系列文章的地址列表
2007-10-19 20:59 1006本系列文章内容为jsf的入门级学习文章,若有不正确之处,还请多 ... -
奉送我的JSF书稿中的一个实例:JSF实现的自选语言界面
2007-12-15 16:44 1117版权声明:本文可以自由转载,转载时请务必标明作者信息及本声明 ... -
jsh实现的petstore的用例图和类图
2008-01-05 16:17 1730JSH实现的petstore项目的架构图: 以下这些图是的分 ... -
JSF+EJB3的项目架构图(最新修改)
2008-02-23 15:45 2273我画的一个JSF+EJB3的项目架构初稿图,总感觉有不妥之处, ... -
我做的JSF1.2的PPT
2008-02-25 23:55 1912封面: 目录页: 内容第一页: 其它的以后统一做成PD ...
相关推荐
在JSF和MVC结合的系统中,JSF组件与MVC模型紧密集成,使得开发者能够方便地将用户界面交互与后端业务逻辑关联起来。 **文件名称列表(jsfstudents)** "jsfstudents"可能表示项目中与JSF学生管理相关的文件或...
在没有数据库的情况下运行,数据可能会存储在内存中的简单数据结构(如ArrayList)中,这有助于简化示例,专注于JSF和MVC设计模式的理解。不过,在实际应用中,数据通常会持久化到数据库中。 总之,这个JSF CRUD...
**五、JSF和MVC** 在JSF框架中,Model由JavaBean(后台bean)表示,View是`.xhtml`文件,Controller则由JSF生命周期和组件事件处理机制共同完成。通过这种方式,开发者可以清晰地划分职责,提高代码的可维护性和可...
5. **JSF和MVC模式** - JSF遵循Model-View-Controller(MVC)设计模式。模型负责业务逻辑,视图负责用户界面,控制器负责处理用户请求并协调模型和视图。 6. **managed beans** - managed beans是JSF中的核心组件...
JSF是一种用于构建用户界面的MVC(模型-视图-控制器)框架,而Hibernate则是一个对象关系映射(ORM)工具,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。 **JavaServer Faces (JSF)** JSF是...
本文将深入对比六种流行的Java Web层框架:JSF、Spring MVC、Stripes、Struts 2、Tapestry和Wicket。 **JavaServer Faces (JSF)** JSF作为Java EE的一部分,拥有广泛的支持和市场需求。它的优点在于快速上手和丰富...
**JSF (JavaServer Faces)** 和 **Spring** 都是目前广泛使用的Java Web开发框架。JSF 是一个用于构建基于 Java 的 Web 应用程序的标准组件框架,而 Spring 框架则是一个全面的轻量级应用程序框架,用于简化企业级...
JSF的核心概念包括组件、事件、渲染器和生命周期,这些元素共同构建了一个强大的MVC(模型-视图-控制器)架构。 **组件模型**:JSF中的组件是UI的构建块,可以是简单的HTML元素如按钮或输入框,也可以是复杂的...
本教程旨在帮助读者深入理解和熟练掌握JSF技术,以便于高效地开发企业级的Web应用。 **1. JSF概述** JSF是Java Community Process(JCP)制定的标准,主要目标是简化Java Web应用程序的开发。它通过提供一套UI组件...
**JSF(JavaServer Faces)** 是...这两个库在Java Web开发中起着关键作用,特别是在构建MVC架构的应用程序时,它们提供了方便的组件和标签库,使开发者能够更加专注于业务逻辑,而不是底层的HTTP处理和页面渲染细节。
1. **JSF架构**:JSF采用MVC(Model-View-Controller)设计模式,它提供了组件化UI开发的能力。模型负责业务逻辑,视图负责展示,控制器负责处理用户请求并更新模型。 2. **JSF组件**:JSF的核心是UI组件库,如`h:...
JSF的核心在于其生命周期,包括六种不同的阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用和渲染响应。通过JSF,开发者可以将业务逻辑与视图层分离,简化开发过程。 **Hibernate** Hibernate是一个...
JSF遵循MVC(Model-View-Controller)设计模式,将业务逻辑、视图呈现和用户交互分离开来,使得开发者能够更专注于各自领域的代码编写。JSF的核心组件包括UI组件、事件处理、数据绑定和转换验证。 ### 2. UI组件库 ...
JSF通过将托管Bean的属性和方法直接绑定到UI组件上,实现了MVC模式的无缝集成,进一步简化了开发流程。 #### 五、JSF与HTTP协议 尽管Web应用基于HTTP协议,其本质是非事件驱动的,但JSF通过封装HTTP请求和响应的...
JavaServer Faces(JSF)是Java平台上的一种用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了一种声明式的方式来构建用户界面,简化了开发过程,并且与Java EE平台无缝集成。本系列资料包括《JSF...
这个框架专注于简化用户界面组件的构建和管理,提供了一种模型-视图-控制器(MVC)架构来创建交互式的Web应用。 **核心概念:** 1. **组件库** - JSF 提供了丰富的UI组件,如按钮、表单、表格等,开发者可以通过...
它为开发人员提供了一种模型-视图-控制器(MVC)架构,简化了前端和后端之间的交互。JSF提供了组件库,使得创建动态、交互式的网页变得简单。 在“jsf第一个例子”中,我们通常会遇到以下关键概念: 1. **JSF生命...
JSF提供了一套丰富的组件库,如`h:`和`f:`命名空间中的标准组件,以及像PrimeFaces这样的第三方组件库,它们提供了更多的高级功能和美观的用户界面。例如,`h:inputText`用于创建文本输入字段,`h:commandButton`...
JSF架构基于MVC(Model-View-Controller)模式,由以下核心组件组成: - **模型(Model)**:业务逻辑,通常由JavaBeans(也称为管理Bean)实现,存储和处理应用程序数据。 - **视图(View)**:用户界面,由JSF...