- 浏览: 54402 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (294)
- java (12)
- java jeecg (3)
- online-coding (0)
- jeecg-ui-online-coding (0)
- jeecg-weibo (0)
- jeecg (23)
- jeecg-minidao-mybatis (1)
- jeewx (5)
- 微信 (6)
- api (2)
- 微信,插件开发 (1)
- 开源社区, (7)
- minidao-pe,mybatis (1)
- hibernate (1)
- 开源社区,报表配置 (1)
- 开源社区,报表配置,表单移动开发 (1)
- jeewx,微信入门,视频教程 (1)
- 开源社区,入门教程,视频教程 (1)
- 开源社区,插件开发,环境搭建 (1)
- 开源团队,招募 (1)
- 开源社区,开发平台,java (1)
最新评论
JSF 源代码赏析之Lifecycle
JSF 源代码赏析之Lifecycle
关键字: jsf sourcecode lifecycle
JSF的生命周期在JSF应用中起着至关重要的作用,每一个JSF请求的处理都需要经过一次生命周期,本文从源码的角度分析JSF的生命周期。
在讨论生命周期之前,我们先要讨论FacesContext的一些元素,他们在整个生命周期中扮演了非常重要的角色。么个JSF应用必须保存它所处理的请求信息,FacesContext为处理请求和生成响应保存了所有必需的上下文信息,具体而言,它包括:
1.信息队列,MessageQueue,保存所有的消息
2.当前的组件树,ViewRoot,
3.外部上下文,ExternalContext
4.Application。
下面就是Sun的FacesContextImpl中的变量:
这里面有很多重要的对象值得我们去研究,按照从上到下的顺序,我们先来看看ExternalContext。
ExternalContext其实是对ServletContext(或PortletContext)的封装,提供了访问外部容器资源的各种方法,ExternalContext基类定义如下:
在讨论生命周期之前,我们先要讨论FacesContext的一些元素,他们在整个生命周期中扮演了非常重要的角色。么个JSF应用必须保存它所处理的请求信息,FacesContext为处理请求和生成响应保存了所有必需的上下文信息,具体而言,它包括:
1.信息队列,MessageQueue,保存所有的消息
2.当前的组件树,ViewRoot,
3.外部上下文,ExternalContext
4.Application。
下面就是Sun的FacesContextImpl中的变量:
com.sun.faces.context.FacesContextImpl:
- //RelationshipInstanceVariables
- privateResponseStreamresponseStream=null;
- privateResponseWriterresponseWriter=null;
- privateExternalContextexternalContext=null;
- privateApplicationapplication=null;
- privateUIViewRootviewRoot=null;
- privateELContextelContext=null;
- privateRenderKitFactoryrkFactory;
- privateRenderKitlastRk;
- privateStringlastRkId;
- /**
- *StoremappingofclientIdtoArrayListofFacesMessage
- *instances.ThenullkeyisusedtorepresentFacesMessageinstances
- *thatarenotassociatedwithaclientIdinstance.
- */
- privateMap<String,List<FacesMessage>>componentMessageLists;
- //AttributeInstanceVariables
- privatebooleanrenderResponse=false;
- privatebooleanresponseComplete=false;
这里面有很多重要的对象值得我们去研究,按照从上到下的顺序,我们先来看看ExternalContext。
ExternalContext其实是对ServletContext(或PortletContext)的封装,提供了访问外部容器资源的各种方法,ExternalContext基类定义如下:
javax.faces.context.ExternalContext:
- publicabstractclassExternalContext{
- publicstaticfinalStringBASIC_AUTH="BASIC";
- publicstaticfinalStringCLIENT_CERT_AUTH="CLIENT_CERT";
- publicstaticfinalStringDIGEST_AUTH="DIGEST";
- publicstaticfinalStringFORM_AUTH="FORM";
- //----------------------------------------------------------PublicMethods
- publicabstractvoiddispatch(Stringpath)
- throwsIOException;
- publicabstractStringencodeActionURL(Stringurl);
- publicabstractStringencodeNamespace(Stringname);
- publicabstractStringencodeResourceURL(Stringurl);
- publicabstractStringgetAuthType();
- publicabstractObjectgetContext();
- publicabstractStringgetInitParameter(Stringname);
- publicabstractMapgetInitParameterMap();
- publicabstractStringgetRemoteUser();
- publicabstractObjectgetRequest();
- publicvoidsetRequest(Objectrequest){
- ExternalContextimpl;
- if(null!=(impl=(ExternalContext)this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))){
- impl.setRequest(request);
- return;
- }
- thrownewUnsupportedOperationException();
- }
- publicvoidsetRequestCharacterEncoding(Stringencoding)throwsUnsupportedEncodingException{
- ExternalContextimpl;
- if(null!=(impl=(ExternalContext)this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))){
- impl.setRequestCharacterEncoding(encoding);
- return;
- }
- thrownewUnsupportedOperationException();
- }
- publicabstractStringgetRequestContextPath();
- publicabstractLocalegetRequestLocale();
- publicabstractIterator<locale></locale>getRequestLocales();
- publicabstractIterator<string></string>getRequestParameterNames();
- publicabstractStringgetRequestPathInfo();
- publicabstractStringgetRequestServletPath();
- publicStringgetRequestCharacterEncoding(){
- ExternalContextimpl;
- if(null!=(impl=(ExternalContext)this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))){
- //noinspectionTailRecursion
- returnimpl.getRequestCharacterEncoding();
- }
- thrownewUnsupportedOperationException();
- }
- publicStringgetRequestContentType(){
- ExternalContextimpl;
- if(null!=(impl=(ExternalContext)this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))){
- //noinspectionTailRecursion
- returnimpl.getRequestContentType();
- }
- thrownewUnsupportedOperationException();
- }
- publicStringgetResponseCharacterEncoding(){
- ExternalContextimpl;
- if(null!=(impl=(ExternalContext)this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))){
- //noinspectionTailRecursion
- returnimpl.getResponseCharacterEncoding();
- }
- thrownewUnsupportedOperationException();
- }
- publicStringgetResponseContentType(){
- ExternalContextimpl;
- if(null!=(impl=(ExternalContext)this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))){
- //noinspectionTailRecursion
- returnimpl.getResponseContentType();
- }
- thrownewUnsupportedOperationException();
- }
- publicabstractURLgetResource(Stringpath)throwsMalformedURLException;
- publicabstractInputStreamgetResourceAsStream(Stringpath);
- publicabstractSet<string></string>getResourcePaths(Stringpath);
- publicabstractObjectgetResponse();
- publicabstractObjectgetSession(booleancreate);
- publicabstractPrincipalgetUserPrincipal();
- publicabstractbooleanisUserInRole(Stringrole);
- publicabstractvoidlog(Stringmessage,Throwableexception);
- publicabstractvoidredirect(Stringurl)throwsIOException;
- }
这个抽象类共有1000多行,提供了访问外部资源的各种方法,主要是对ServletContext或是PortletContext中方法的封装,比如getRemoteUser、getRequest、getSession等方法都是很常用的,但是在运用时也要注意,如果在程序中写死是ServletContext或HttpServletRequest,那么以后对于更换到Portal环境中是不利的,这个如果需要转换的话需要注意了。
下面来看看Application对象。Application对象是应用系统范围内的单例类,提供了对FacesContext文件的对象封装,从这个对象中可以得到很多FacesContext文件中的配置,还是来看看定义吧.
- //-------------------------------------------------------------Properties
- publicabstractActionListenergetActionListener();
- publicabstractvoidsetActionListener(ActionListenerlistener);
- publicabstractvoidsetDefaultLocale(Localelocale);
- publicabstractStringgetDefaultRenderKitId();
- publicabstractvoidsetDefaultRenderKitId(StringrenderKitId);
- publicabstractStringgetMessageBundle();
- publicabstractvoidsetMessageBundle(Stringbundle);
- publicabstractNavigationHandlergetNavigationHandler();
- publicabstractvoidsetNavigationHandler(NavigationHandlerhandler);
- publicabstractPropertyResolvergetPropertyResolver();
- publicResourceBundlegetResourceBundle(FacesContextctx,Stringname){
- Applicationapp=getRIApplicationImpl(ctx);
- if(app!=null){
- //noinspectionTailRecursion
- returnapp.getResourceBundle(ctx,name);
- }
- thrownewUnsupportedOperationException();
- }
- publicabstractVariableResolvergetVariableResolver();
- publicabstractvoidsetVariableResolver(VariableResolverresolver);
- publicvoidaddELResolver(ELResolverresolver){
- Applicationapp=getRIApplicationImpl();
- if(app!=null){
- app.addELResolver(resolver);
- }else{
- thrownewUnsupportedOperationException();
- }
- }
- publicELResolvergetELResolver(){
- Applicationapp=getRIApplicationImpl();
- if(app!=null){
- //noinspectionTailRecursion
- returnapp.getELResolver();
- }
- thrownewUnsupportedOperationException();
- }
- publicabstractViewHandlergetViewHandler();
- publicabstractvoidsetViewHandler(ViewHandlerhandler);
- publicabstractStateManagergetStateManager();
- publicabstractvoidsetStateManager(StateManagermanager);
- //-------------------------------------------------------ObjectFactories
- publicabstractvoidaddComponent(StringcomponentType,
- StringcomponentClass);
- publicabstractUIComponentcreateComponent(StringcomponentType)
- throwsFacesException;
- publicabstractUIComponentcreateComponent(ValueBindingcomponentBinding,
- FacesContextcontext,
- StringcomponentType)
- rowsFacesException;
- publicUIComponentcreateComponent(ValueExpressioncomponentExpression,
- FacesContextcontext,
- StringcomponentType)
- rowsFacesException{
- if(null==componentExpression||null==context||
- null==componentType){
- //PENDING-i18n
- StringBuilderbuilder=newStringBuilder(64);
- builder.append("nullparameters-");
- builder.append("componentExpression:").append(componentExpression);
- builder.append(",context:").append(context);
- builder.append(",componentType:").append(componentType);
- thrownewNullPointerException(builder.toString());
- }
- Objectresult;
- booleancreateOne=false;
- try{
- if(null!=(result=
- componentExpression.getValue(context.getELContext()))){
- //iftheresultisnotaninstanceofUIComponent
- createOne=(!(resultinstanceofUIComponent));
- //wehavetocreateone.
- }
- if(null==result||createOne){
- result=this.createComponent(componentType);
- componentExpression.setValue((context.getELContext()),result);
- }
- }catch(ELExceptionelex){
- thrownewFacesException(elex);
- }
- return(UIComponent)result;
- }
- publicabstractIterator<String>getComponentTypes();
- publicabstractvoidaddConverter(StringconverterId,
- publicabstractvoidaddConverter(ClasstargetClass,
- StringconverterClass);
- publicabstractConvertercreateConverter(StringconverterId);
- publicabstractConvertercreateConverter(ClasstargetClass);
- publicabstractIterator<String>getConverterIds();
- publicExpressionFactorygetExpressionFactory(){
- Applicationapp=getRIApplicationImpl();
- if(app!=null){
- //noinspectionTailRecursion
- returnapp.getExpressionFactory();
- }
- thrownewUnsupportedOperationException();
- }
- publicObjectevaluateExpressionGet(FacesContextcontext,
- Stringexpression,
- ClassexpectedType)throwsELException{
- Applicationapp=getRIApplicationImpl(context);
- if(app!=null){
- //noinspectionTailRecursion
- returnapp.evaluateExpressionGet(context,expression,expectedType);
- }
- thrownewUnsupportedOperationException();
- }
- publicabstractMethodBindingcreateMethodBinding(Stringref,
- Classparams[])
- throwsReferenceSyntaxException;
- publicabstractIterator<Locale>getSupportedLocales();
- publicabstractvoidsetSupportedLocales(Collection<Locale>locales);
- publicvoidaddELContextListener(ELContextListenerlistener){
- Applicationapp=getRIApplicationImpl();
- if(app!=null){
- app.addELContextListener(listener);
- }else{
- thrownewUnsupportedOperationException();
- }
- }
- publicvoidremoveELContextListener(ELContextListenerlistener){
- Applicationapp=getRIApplicationImpl();
- if(app!=null){
- app.removeELContextListener(listener);
- }else{
- thrownewUnsupportedOperationException();
- }
- }
- publicELContextListener[]getELContextListeners(){
- Applicationapp=getRIApplicationImpl();
- if(app!=null){
- //noinspectionTailRecursion
- returnapp.getELContextListeners();
- }else{
- thrownewUnsupportedOperationException();
- }
- }
- publicabstractvoidaddValidator(StringvalidatorId,
- StringvalidatorClass);
- publicabstractValidatorcreateValidator(StringvalidatorId)
- throwsFacesException;
- publicabstractIterator<String>getValidatorIds();
- publicabstractValueBindingcreateValueBinding(Stringref)
- throwsReferenceSyntaxException;
- //---------------------------------------------------------PrivateMethods
- privatestaticApplicationgetRIApplicationImpl(FacesContextcontext){
- ExternalContextextContext;
- if(context!=null){
- extContext=context.getExternalContext();
- }else{
- extContext=
- FacesContext.getCurrentInstance().getExternalContext();
- }
- if(extContext!=null){
- return((Application)extContext.getApplicationMap().
- get("com.sun.faces.ApplicationImpl"));
- }
- returnnull;
- }
- privatestaticApplicationgetRIApplicationImpl(){
- returngetRIApplicationImpl(null);
- }
相关推荐
JavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-apiJavaEE源代码 jsf-...
JavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源代码 jsf-implJavaEE源...
在"Jsf 项目源代码"这个压缩包中,我们可以推测这包含了一个基于JSF 2.0版本的项目。JSF 2.0是该框架的一个重要版本,引入了许多增强功能,例如面部刷新(Facelet)、视图状态管理、自定义标签改进以及请求处理的...
项目的源代码中应该包含了上述所有部分,提供了一个完整的JSF大文件上传解决方案。对于希望学习或改进自己JSF文件上传功能的开发者来说,这是一个宝贵的资源。通过深入研究源代码,可以了解到如何处理大文件、如何...
JSF的组件模型是其核心特性之一。它提供了大量的UI组件,如按钮、输入框、表格等,开发者可以通过XML(在JSF中是Facelets或JSP)来声明这些组件。每个组件都有自己的生命周期和属性,可以与后端的数据模型绑定,实现...
**标题“Core JSF源代码”** 提供的源码可能是书中示例代码的集合,这些代码可以帮助读者更直观地理解书中讲解的概念和技术。通过分析和运行这些源码,开发者可以更好地学习JSF的实践操作和工作原理。 **描述中的...
**JSF 2.0 源代码详解** JavaServer Faces (JSF) 是一个用于构建Web用户界面的Java框架,由Sun Microsystems(现已被Oracle收购)开发并维护。JSF 2.0是该框架的一个重要版本,它带来了许多改进和新特性,提升了...
**JSF 1.2.07 源代码详解** JavaServer Faces (JSF) 是Java平台上用于构建用户界面的官方标准框架,它提供了一种声明式的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,引入了许多增强功能和改进,为...
在这个"JSF实例源代码下载"中,我们有机会深入学习和理解JSF的工作原理及其应用。 1. **JSF框架概述**:JSF设计的主要目标是简化服务器端的Web开发,通过提供可重用的UI组件和事件处理机制。JSF生命周期包括六步:...
**JSF 1.2 源代码详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,它提供了一种组件化的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,发布于2007年,带来了许多增强功能和改进,...
这个"JSF入门实例 源代码"是专门为初学者设计的,帮助他们快速理解并掌握JSF的基本概念和用法。下面我们将深入探讨JSF的核心特性、工作原理以及如何通过给定的实例进行学习。 1. JSF概述: JSF是一种官方支持的...
**JSF(JavaServer Faces)** 是Java平台上的一种用于...通过研究源代码,你可以了解如何将用户界面与后端服务集成,以及如何处理复杂的文件I/O和数据库操作。此外,这个实例也可以作为你自定义文件管理系统的起点。
在本例中,我们有一个完整的JSF博客源代码,该源码使用了Apache Derby数据库,特别适合初学者用来学习JSF的基础知识和实际应用。** **1. JSF框架详解** JSF的核心概念是组件模型,它允许开发者通过拖放UI组件来构建...
5. **分页(Pagination)**:在**"JSF 分页学习代码"**标签下,可能包含了一个示例,展示如何在JSF应用中实现数据的分页显示,这通常涉及到对大量数据集的处理和展示策略。 6. **JSF与Spring、Hibernate集成**:在`...
**JSF IN ACTION 源代码详解** "JSF IN ACTION 源代码" 是一本深入探讨JavaServer Faces(JSF)技术的书籍的配套源码。这本书籍旨在帮助开发者全面理解JSF框架,通过实践代码来提升技能。源代码的提供意味着读者...
richface,jsf源码。相当不错的资料。特别是richface.里面有不错的例子。放到tomcat下可以直接运行啊。
在你所拥有的"JSF(java server faces)开源框架的源代码"压缩包中,包含的是JSF 1.1版本的源码,这对于深入理解和学习这个框架有着重要的价值。 首先,让我们来看看JSF框架的基础结构和主要组成部分: 1. **组件...
本资源包含的是《JSF编程》一书第二章的配套源代码,这将有助于读者深入理解JSF的工作原理和实践应用。 在JSF中,一个关键概念是UI组件。这些组件可以是简单的HTML元素,如按钮和文本输入,也可以是复杂的自定义...
**JSF2入门视频+源代码教程** JavaServer Faces(JSF)是Oracle公司推出的用于构建Web应用程序的Java EE框架。JSF2是其第二个主要版本,带来了许多增强功能和改进,使得开发更加高效和易用。这个"JSF2入门视频+源...
在这个“jsf实用代码”压缩包中,我们可能找到了与JSF相关的代码示例,特别是与`select`标签相关的部分,这通常指的是在JSF中用于创建下拉选择框或者多选框的元素。 在JSF中,`<h:selectOneMenu>`和`...