- 浏览: 49246 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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源...
sun 最新框架,jsf写的j2ee项目代码
自己写的JSF文件上传项目,可以最大支持最大1.99G文件 需要的jar包需奥自己加 附:jar目录截图
JSF2.0源代码,具体版本是2.03。但与其它版本差别不太,适用下不了源码的GGMM。
jsf 新生的 web 开发框架
JSF工程实例源代码,包含实现文件上传与下载的全部源代码和文档,数据库使用oracle10g
jsf教程实例的源代码,有利于读者更好的学习。
jsf1.2源代码。可用myeclipse关联起来查看里边源码。
Core JSF(JSF核心技术)就不用我介绍了吧,这是该书的源码
一个小例子适合jsf入门者。本人自己敲的代码 完全可用 启动服务器(tomcat)部署之后 输入:http://localhost:8080/HelloJsf/HelloWorld.faces就可以了
jsf-1_2_07-src
JSF国际化范例,源代码 JSF国际化范例,源代码 JSF国际化范例,源代码
richface,jsf源码。相当不错的资料。特别是richface.里面有不错的例子。放到tomcat下可以直接运行啊。
JSF的源代码,即是jsf本身框架的源代码,通过阅读可以更好地学习JSF,深入理解它的精髓。
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种...JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文档
完整的jsf博客例子,使用derby数据库,展示一个典型的博客,适合初学者学习jsf,是一个不错的学习例子,使用时只需要导入到eclipse中,把derby数据库的服务启动即可
JSF IN ACTION (源代码) 以前上传的书的源代码.......IN Action书的代码都可以在Manning 的官方网站(www.manning.com)上可以下载得到..希望大家喜欢
jsf完全参考手册源代码