JSF实现了基于web的以下三个梦想

1.java程序员不必顾虑HTTP的细节,可以按照原本熟悉的事件驱动模型来设计后台系统,并通过一个能担保数据类型无误的数据传递接口将后台系统与前台界面结合在一起。

2.没有程序设计知识的网页美工人员也可以使用程序员提供的组件来布置用户界面的观感。

3.厂商可以研制更好用更一致的前台开发工具。

JSF(Java Server Faces)

它与Struts一样也是一个基于MVC模型的开源框架,另外增加了事件处理、验证器、转换器,最重要的是利用jsf中的用户界面组件标签库可以开发出漂亮的界面。

JSF的有缺点

优点:1.增加了事件处理这一功能。

2利用用户界面组件标签进行开发。

3在jsf的控制器ManagedBean本身是一个pojo类,它不像Struts中的Action受框架束缚,它不和jsf做任何绑定,脱离该框架也可以独立地运行。

4被纳入了JavaEE规范。

缺点:1jsf推出的时间不长,现在很多项目都不用jsf,支持的厂商也不是很多,文档资源也不是很丰富,使用的人群和成功案例不多。

2和Struts框架一样,JSF框架的机制也是相当的复杂,不易理解。

3验证功能没有Struts强大。

开发一个JSF应用需要JSF的jar包,在web.xml文件中配置jsf的主控制器(FacesServlet),需要提供一个jsf的配置文件(faces-config.xml)

JSF页面导航(服务器的内部跳转或者重定向)

1.静态导航(跳转页面是固定的)

<h:commandButton type="submit" value="start" action="导航结果的名字">

2.动态导航(根据一些判断之后才能决定跳转的页面)

Name:loginBean-->放置在scope中的属性名

若managedBean中的Action方法返回null或者返回结果没有在faces-config.xml中配置对应的规则,那么它还是会提交给自己。

JSF与Struts比较

基于MVC  使用用户界面组件  JavaEE规范   支持事件   控制器

Struts   是                  否               否             否       ActionServlet(*.do)

JSF     是          是               是             是       FacesServlet(*.faces)

注:JSF中表单提交方式只有POST,没有GET。

JSF的简单控制流程

1.以get方式访问就jsf页面,获得form表单;

2.以post方式提交form表单

3.实例化bean(Managed Bean),把客户端提交的数据放到bean对象中

4.调用bean中的controller method

5.根据action controller method返回的结果选择相应的jsf页面作显示

生命周期:

重建视图:jsf框架将访问的*.faces转换为*.jsp视图返回客户端

应用请求值:实例化ManagedBean,并获得请求中的参数

执行验证:ManagedBean的属性赋值前对请求参数值进行验证

调用应用程序:调用控制器的Action方法执行相关的业务逻辑(调用模型层)

绘制响应页面:请求处理完毕后,根据不同的结果生成页面返回给客户端。

配置导航规则:

每一个nvaigation-rule作为一个导航规则,可以包含一个from-view-id和多个navigation-case。其中from-view-id代表请求来源页面;navigation-case中有两个子元素;from-outcome表示提交按钮的action属性值;to-view-id代表目标页面。

在bean中获取客户端提交数据的方式

1.让jsf框架把客户端提交的数据放到bean的属性中。

例如:

在jsp中这样调用:

<h:form>

loginName:<h:inputText value="#{userBean.loginName}"></inputText>

Password:<h:inputSecret value="#{userBean.password}"></inputSecret>

<h:commandButton action="#{userBean.login}" value="login"></h:commandButton>

</h:form>

在配置文件中这样:

<managed-bean>

<managed-bean-name>userBean</managed-bean-name>

<managed-bean-class>com.briup.bean.userBean</managed-bean-class>

<managed-bean-scope>request</managed-bean-scope>

</managed-bean>

在bean中创建一个方法:

Public String login(){

If(!loginName.equal("ln")){
              return "loginNameError";

}

If(!password.equal("")){

Return "passwordError";

}

Return "loginSuccess";

}

在配置文件中还要这样:

<navigation-rule>

<from-view-id>/navigation/login,jsp</from-view-id>

<navigation-case>

<from-outcome>loginNameError</from-outcome>

<to-view-id>/navigation/loginNameError.jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>passwordError</from-outcome>

<to-view-id>/navigation/passwordError,jsp</to-view-id>

</navigation-case>

<navigation-case>

<from-outcome>loginSuccess</from-outcome>

<to-view-id>/navigation/loginSuccess.jsp</to-view-id>

</navigation-case>

</navigation-rule>

事件处理:在JSF中有四种类型的事件

1.动作事件

2.即时事件

3.值变事件

4.Phase(阶段)事件

动作事件的处理:

1.使用默认监听器处理

在bean中添加一个方法,有个参数ActionEvent;

在按钮上指定一个actionlistener属性,绑定bean

2.用户自定义一个监听器

创建一个监听器类,实现actionlistener接口;

注册监听器。

即时事件的处理:

(跳过执行验证和更新模型值得步骤,直接进入事件处理)

当按钮的immediate属性设置为true时,产生即时事件,默认情况下为false。应用场合:按钮,超级链接。

值变事件的处理:(当改变某一组件的值时)

1.使用默认监听器处理:

在bean中添加一个方法,有一个参数ValueChangeEvent;

在产生值变事件的组件上指定valuechangeListener属性,绑定不bean中的方法;

2.用户自定义监听器:

创建一个监听器类,实现ValueChangeListener接口;

注册监听器。

自定义监听器的执行优先于默认监听器。

应用场合:文本框,下拉框,checkbox,radio

Phase事件的处理:(一个请求会经过六个阶段,经过每个阶段的前后都会产生事件)

1.创建一个监听器类,实现PhaseListener接口

2.在faces-config.xml中注册这个监听器。

验证器:

1.使用JSF框架提供的验证器

<f:validateLength>验证字符串的长度

<f:validateLongRange>验证整数的大小

<f:validateDoubleRange>验证double类型的数字的大小

2.自定义一个验证器

创建一个验证器类,实现validator接口。

在faces-config.xml文件中注册验证器(<validator>)

使用自定义验证器,在页面中使用<f:validator>,指定在faces-config.xml文件中注册的验证器的id

转换器(作用:用户转换form表单提交的数据和bean的属性类型)

1.使用JSF框架提供的转换器

<f:convertDateTime> 字符串和Date的类型的数据之间的转换;

<f:convertNumber>字符串和数字类型之间的转换

2.自定义一个转换器

创建一个转化器,实现converter接口

在faces-config.xml文件中注册转换器;

使用转换器。

JSF中如何遍历集合和数组:(DateTable)

<h:dataTable value="#{tableBean.users}" value="users">其中value指定需要遍历的集合或者数组,var指定从集合或者数组中取出的对象存放的变量名。

jsf简介的更多相关文章

  1. hello1实例的分析

    JSF简介一. 什么是 JSF:JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的新标准 Java 框架.它提供了一种以组件为中心来开发 Java Web 用户界面的方法 ...

  2. Winter is coming Just have a little faith. JSF框架简介与实例

    JSF 体系结构: JSF 的主要优势之一就是它既是Java Web应用程序的用户界面标准又是严格遵循模型-视图-控制器 (MVC) 设计模式的框架.用户界面代码(视图)与应用程序数据和逻辑(模型)的 ...

  3. JSF(JavaServer Faces)简介

    JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准).它提供了一种以组件为中心的 ...

  4. ADF_ADF Faces系列2_使用JSF开发基于Ajax的用户界面:ADF Faces富客户端组件简介(Part2)

    2013-05-01 Created By BaoXinjian

  5. ADF_ADF Faces系列1_使用JSF开发基于Ajax的用户界面:ADF Faces 富客户端组件简介(Part1)

    2013-05-01 Created By BaoXinjian

  6. Spring 框架的架包分析、功能作用、优点,及jar架包简介

    Spring 框架的架包详解    Spring的作用     Spring的优势  由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...

  7. JSF标签大全详解

    1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么. 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多 ...

  8. spring框架篇(一)-------spring简介与配置文件使用控制反转事例

    spring简介 Spring 是一个开源框架,中文意思就是春天,也许是作者想让自己的这个框架给Java开发人员带来春天吧.其官方网站是 https://spring.io/ ,可以在官方网站下载到完 ...

  9. JSF初学之概念篇1

    先转一篇介绍JSF的文章: Javaserver Faces 简介 — 什么是 JSF? 作者:Chris Schalk,Oracle Corporation2005 年 4 月 什么是 JSF? J ...

随机推荐

  1. linux永久更改eth0的ip地址后仍然ping不通过

    编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0 引用:DEVICE=eth0 //设备名称,不要修改 BOOTPROTO=static //不要修改 BRO ...

  2. BZOJ3295 [Cqoi2011]动态逆序对

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. SQL Server附加数据库时失败,提示:“未重新生成日志,因为有不止一个日志文件”

    这个只能是试一下的方法,但不一定能成功,可以尝试如下几个方法: 1.登录远程桌面,然后以.登录SQL Server,并以Windows身份登录,然后再附加数据库时把日志文件删除. 2.试下这个脚本: ...

  4. glibc resolv/res_send.c getaddrinfo() buffer stack smash when dealing malformation big DNS Response Package

    catalogue . 漏洞简述 . 调试环境搭建 . 漏洞利用 . 漏洞分析 . 缓解修复方案 1. 漏洞简述 0x1: 函数调用顺序 getaddrinfo (getaddrinfo.c) -&g ...

  5. selenium 基本的键盘方法

    今晚不想加班,于是赶紧回来看看书: 1.下了selenium的小工具:FireBug/FirePath. 2.确定了看书顺序,我觉得难度低点开始比较好,所以我还是先看基于Python的selenium ...

  6. python函数(五)

    函数 1.函数基本语法及特性 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警, 你掏空了所有的知识量,写出了以下代码 ...

  7. MySQL好用的数学函数

    最近项目很忙,分给我的功能都比较复杂,还好能应付的下来.在工作的过程中,我发现使用mysql的自带函数能够极大的减少程序的复杂度.这是必然的,使用mysql的函数,能够在程序里面省却很多的循环遍历.但 ...

  8. .net 运用YUI相关的dll压缩js (按照自己的规则,想想都觉得强大和有趣)

    写在前面 不管是做前端的还是做后台的,不管是懂javaScript的还是不太懂JavaScript的人,我想都或多或想的知道些许js压缩对于页面性能提升的效应吧. 之前老喜欢用在线压缩工具去压缩js, ...

  9. ionic中获取坐标方法

    ionic中获取坐标的方法 1.首相需要执行命令: cordova plugin add cordova-plugin-geolocation2.然后块级注入配置bower文件引入ngCordova ...

  10. BZOJ1972: [Sdoi2010]猪国杀

    “此题注意样例少了个J,且牌堆可能用完牌,若牌用完则不停取最后一张”.——hzwer 然后直接模拟,认真读题,理清思路. #include<cstdio> #include<list ...