第6章 JSF JAVAEE编程
时间:2025-07-12
时间:2025-07-12
第6章 JSF
目录
6.1什么是JSF 6.2第一个JSF应用 6.3 Managed Bean 6.4视图 6.5页面模板 6.6 JSF请求处理过程
6.7导航控制 6.8类型转换 6.9输入校验 6.11国际化支持 6.12 Ajax 6.10事件处理
(1)为什么需要框架
6.1什么是JSF
复杂企业WEB应用程序,遇到的问题:
如何确保企业应用界面风格统一,并且简单易维护如何在企业应用众多的页面间根据业务逻辑实现导航控制如何对用户的输入信息进行校验来确保企业应用的安全如何实现国际化支持以服务全球不同地区的用户
Servlet、JSP等技术虽然可以解决上述问题,但需要开发人员具备高超的编程技巧且付出大量的劳动。框架针对web应用开发中的诸如类型转换、输入校验等共性问题,以及企业应用的稳定性、扩展性等需求提供了一套完整解决方案。
(1)为什么需要框架
6.1什么是JSF
框架优点
确保开发质量。对一些共性问题提供了通用解决方法,吸收了众多优秀实践经验,保证了软件的稳定性、扩展性。提高开发效率。框架的首要目标就是重用:一是应用分析上的重用;二是代码的重用。
(2)什么是框架
6.1什么是JSF
软件设计角度:是一个可复用的软件架构解决方案,规定了应用的体系结构,阐明了软件体系结构中各层次间及层次内部各组件间的依赖关系、自认分配和控制流程,表现为一组接口、抽象类及其实例之间协作的方法。软件实现角度:是软件快速实现的基础平台,包含一组可重用的组件,使得某一领域内的软件的基础功能和通用流程的实现更加高效便捷,将使得开发人员可以专注于特定业务逻辑。
6.1什么是JSF (3)什么是JSF
JSF是一个框架标准 JSF是web应用表现层的框架标准 JSF是一个基于组件的框架标准 JSF是一个基于MVC架构的框架
Model: Managed Bean,实现具体的业务逻辑 View: XHTML,实现信息展示与用户交互 Control: JSF框架,实现具体的控制逻辑,管理模型与视图之间的通信
(4)MVC框架
(5)学习JSF?
JSF是Java EE规范推荐的表现层的框架标准 JSF吸收了流行框架的优点便于与其他Java EE技术集成
6.2第一个JSF应用
例子讲解:HelloWorld(message.java hello.xhtml)开发过程总结:
创建模型组件:@ManagedBean创建视图组件:XHTML控制组件:配置文件web.xml对核心控制组件 javax.faces.webapp.FacesServlet进行配置
思考:基于JSF框架的web开发与基于servlet和JSP的开发有何不同?
前者的结构更加清晰:xhtml负责表现逻辑,Managed Bean负责业务逻辑,JSF框架负责控制逻辑;对
于后者,显示信息与业务逻辑的代码是混杂在一起前者开发工作更简单,一些基础性、通用性的工作如请求处理、响应生成等全由JSF框架处理。
6.3 Managed Bean
(1)定义managed bean (2)生命周期 (3)CDI Bean (4)Bean之间的依赖
(1)定义Managed Bean
两种定义方式:
利用JSF注解:
必选注解:@ManagedBean,它有一个可选属性name,缺省时,则JSF框架默认将Managed Bean类名的首字母小写后做为它的名称可选注解:@SessionScoped,@RequestScoped(默认),@ApplicationScoped,@Custom Scoped等
在face-config.xml配置文件中配置
Java EE规范推荐采用注解对于Map、List等集合对象,可以直接做为 Managed Bean,并且只能通过在face-config.xml中进行配置。
E.g collection.xhtml(JSFStudy)
(2)生命周期生命周期范围 Application Session View Request None对应注解对应JavaBean的生命周期范围 Session Request作用域整个应用整个会话整个视图整个请求临时@ApplicationScoped Application@SessionScoped@ViewScoped@RequestScoped
View:专门为Ajax控件设计的生命周期范围 None:该类托管Bean不能作为一个单独存在的实体,通常做为属性寄存在其他的托管Bean中,拥有与宿主托管Bean同样的生命周期. 除了Request范围的托管Bean外,其他的托管Bean都要实现序列化接口,而且,只有Request生命范围的托管Bean是线程安全的。 @ManagedBean(eager=true):在应用一启动便创建Bean
(2)生命周期
例子: ProblemBean.java QuizBean.java clever.xhtml (JSFStudy)
@SessionScoped@ViewScoped可正常运行@RequestScoped不能正常运行
(3) CDI Bean
上下文与依赖注入(Contexts and Dependency Injection, CDI )
Java EE 6规范的一项重大功能特性提供了一种更加强大的托管Bean模型支持依赖注入、方法调用拦截和事件触发与侦听可替代JSF的托管Bean声明方式:@Named@SessionScoped…支持Application、Session、Request等,无View类型生命周期范围,并多了一个Conversation生命周期范围
(3) CDI Bean
前面的脑筋急转弯示例中,当正确回答完所有问题后,页面显示的回答正确题目数还要累加,这是不合理的。解决方式:引入CDI Bean的ConversationDemo:(CDIBeanStudy) QuizBean.java clever.xhtml
(4)Bean之间的依赖
地址信息的Managed Bean,JSF是否支持这种依赖呢?
引例:代表用户信息的Managed Bean,可能包含一个用户两个托管Bean之间的依赖:@ManagedPropertyE.g. HelloWorld:MessageBean.java HelloBean.java testbean.xhtml
注意
作为属性的Managed Bean的生命周期必须大于引用它的 Managed bean的生命周期。作为属性的Managed Bean与引用它的Managed Bean之间
不能循环引用
…… 此处隐藏:757字,全部文档内容请下载后查看。喜欢就下载吧 ……