- 浏览: 1396916 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (328)
- JSF (27)
- 生活 (12)
- Ajax (26)
- Maven (6)
- CSS (1)
- Shale (3)
- SiteMesh (1)
- Ext (15)
- JMX (2)
- Windows技巧 (7)
- 工作感悟 (18)
- SVN (2)
- SVG (0)
- GoogleGear (0)
- RAP (2)
- SOA与WebService (3)
- 笔记本技术研究 (1)
- Microsoft (2)
- 英语学习 (3)
- PHP (7)
- web 2.0 (6)
- 语义Web (1)
- IT史话 (3)
- iText (3)
- JVM (1)
- PropertiesEditor (1)
- J2SE (33)
- Spring (2)
- Java Batch (1)
- log (2)
- Struts2 (2)
- DWR (0)
- JAAS (3)
- EJB3 (4)
- Flex (8)
- JFreeChart (1)
- WAS (0)
- 数据库 (2)
- 摄影 (0)
- SQL (1)
- Google App Engine (1)
- linux (5)
- Eclipse plugin (10)
- Testing (0)
- Portal (0)
- 移动互联网 (0)
- SWTBot (1)
最新评论
-
江奇缘:
不错!!!!!!
web.xml里<filter-mapping>中的<dispatcher>作用 -
yy8093:
commonj 第三步,那个调用的方法要在哪里调?servle ...
JAVA中多种计时器的比较与分析 -
di1984HIT:
学习了,不错~
web.xml里<filter-mapping>中的<dispatcher>作用 -
penkee:
com.lowagie.text.DocumentExcept ...
iText中输出 中文 -
氵壞男亼乀:
我想请问下 你哪个html里面引入的几个js文件没看懂!你 ...
DWR入门教程之HelloWorld
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:
- // Relationship Instance Variables
- private ResponseStream responseStream = null;
- private ResponseWriter responseWriter = null;
- private ExternalContext externalContext = null;
- private Application application = null;
- private UIViewRoot viewRoot = null;
- private ELContext elContext = null;
- private RenderKitFactory rkFactory;
- private RenderKit lastRk;
- private String lastRkId;
- /**
- * Store mapping of clientId to ArrayList of FacesMessage
- * instances. The null key is used to represent FacesMessage instances
- * that are not associated with a clientId instance.
- */
- private Map<String,List<FacesMessage>> componentMessageLists;
- // Attribute Instance Variables
- private boolean renderResponse = false;
- private boolean responseComplete = false;
这里面有很多重要的对象值得我们去研究,按照从上到下的顺序,我们先来看看ExternalContext。
ExternalContext其实是对ServletContext(或PortletContext)的封装,提供了访问外部容器资源的各种方法,ExternalContext基类定义如下:
javax.faces.context.ExternalContext:
- public abstract class ExternalContext {
- public static final String BASIC_AUTH = "BASIC";
- public static final String CLIENT_CERT_AUTH = "CLIENT_CERT";
- public static final String DIGEST_AUTH = "DIGEST";
- public static final String FORM_AUTH = "FORM";
- // ---------------------------------------------------------- Public Methods
- public abstract void dispatch(String path)
- throws IOException;
- public abstract String encodeActionURL(String url);
- public abstract String encodeNamespace(String name);
- public abstract String encodeResourceURL(String url);
- public abstract String getAuthType();
- public abstract Object getContext();
- public abstract String getInitParameter(String name);
- public abstract Map getInitParameterMap();
- public abstract String getRemoteUser();
- public abstract Object getRequest();
- public void setRequest(Object request) {
- ExternalContext impl;
- if (null != (impl = (ExternalContext) this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))) {
- impl.setRequest(request);
- return;
- }
- throw new UnsupportedOperationException();
- }
- public void setRequestCharacterEncoding(String encoding) throws UnsupportedEncodingException {
- ExternalContext impl;
- if (null != (impl = (ExternalContext) this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))) {
- impl.setRequestCharacterEncoding(encoding);
- return;
- }
- throw new UnsupportedOperationException();
- }
- public abstract String getRequestContextPath();
- public abstract Locale getRequestLocale();
- public abstract Iterator<locale></locale> getRequestLocales();
- public abstract Iterator<string></string> getRequestParameterNames();
- public abstract String getRequestPathInfo();
- public abstract String getRequestServletPath();
- public String getRequestCharacterEncoding() {
- ExternalContext impl;
- if (null != (impl = (ExternalContext) this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))) {
- //noinspection TailRecursion
- return impl.getRequestCharacterEncoding();
- }
- throw new UnsupportedOperationException();
- }
- public String getRequestContentType() {
- ExternalContext impl;
- if (null != (impl = (ExternalContext) this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))) {
- //noinspection TailRecursion
- return impl.getRequestContentType();
- }
- throw new UnsupportedOperationException();
- }
- public String getResponseCharacterEncoding() {
- ExternalContext impl;
- if (null != (impl = (ExternalContext) this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))) {
- //noinspection TailRecursion
- return impl.getResponseCharacterEncoding();
- }
- throw new UnsupportedOperationException();
- }
- public String getResponseContentType() {
- ExternalContext impl;
- if (null != (impl = (ExternalContext) this.getRequestMap().
- get("com.sun.faces.ExternalContextImpl"))) {
- //noinspection TailRecursion
- return impl.getResponseContentType();
- }
- throw new UnsupportedOperationException();
- }
- public abstract URL getResource(String path) throws MalformedURLException;
- public abstract InputStream getResourceAsStream(String path);
- public abstract Set<string></string> getResourcePaths(String path);
- public abstract Object getResponse();
- public abstract Object getSession(boolean create);
- public abstract Principal getUserPrincipal();
- public abstract boolean isUserInRole(String role);
- public abstract void log(String message, Throwable exception);
- public abstract void redirect(String url) throws IOException;
- }
这个抽象类共有1000多行,提供了访问外部资源的各种方法,主要是对ServletContext或是PortletContext中方法的封装,比如getRemoteUser、getRequest、getSession等方法都是很常用的,但是在运用时也要注意,如果在程序中写死是ServletContext或HttpServletRequest,那么以后对于更换到Portal环境中是不利的,这个如果需要转换的话需要注意了。
下面来看看Application对象。Application对象是应用系统范围内的单例类,提供了对FacesContext文件的对象封装,从这个对象中可以得到很多FacesContext文件中的配置,还是来看看定义吧.
- // ------------------------------------------------------------- Properties
- public abstract ActionListener getActionListener();
- public abstract void setActionListener(ActionListener listener);
- public abstract void setDefaultLocale(Locale locale);
- public abstract String getDefaultRenderKitId();
- public abstract void setDefaultRenderKitId(String renderKitId);
- public abstract String getMessageBundle();
- public abstract void setMessageBundle(String bundle);
- public abstract NavigationHandler getNavigationHandler();
- public abstract void setNavigationHandler(NavigationHandler handler);
- public abstract PropertyResolver getPropertyResolver();
- public ResourceBundle getResourceBundle(FacesContext ctx, String name) {
- Application app = getRIApplicationImpl(ctx);
- if (app != null) {
- //noinspection TailRecursion
- return app.getResourceBundle(ctx, name);
- }
- throw new UnsupportedOperationException();
- }
- public abstract VariableResolver getVariableResolver();
- public abstract void setVariableResolver(VariableResolver resolver);
- public void addELResolver(ELResolver resolver) {
- Application app = getRIApplicationImpl();
- if (app != null) {
- app.addELResolver(resolver);
- } else {
- throw new UnsupportedOperationException();
- }
- }
- public ELResolver getELResolver() {
- Application app = getRIApplicationImpl();
- if (app != null) {
- //noinspection TailRecursion
- return app.getELResolver();
- }
- throw new UnsupportedOperationException();
- }
- public abstract ViewHandler getViewHandler();
- public abstract void setViewHandler(ViewHandler handler);
- public abstract StateManager getStateManager();
- public abstract void setStateManager(StateManager manager);
- // ------------------------------------------------------- Object Factories
- public abstract void addComponent(String componentType,
- String componentClass);
- public abstract UIComponent createComponent(String componentType)
- throws FacesException;
- public abstract UIComponent createComponent(ValueBinding componentBinding,
- FacesContext context,
- String componentType)
- rows FacesException;
- public UIComponent createComponent(ValueExpression componentExpression,
- FacesContext context,
- String componentType)
- rows FacesException {
- if (null == componentExpression || null == context ||
- null == componentType) {
- // PENDING - i18n
- StringBuilder builder = new StringBuilder(64);
- builder.append("null parameters - ");
- builder.append("componentExpression: ").append(componentExpression);
- builder.append(", context: ").append(context);
- builder.append(", componentType: ").append(componentType);
- throw new NullPointerException(builder.toString());
- }
- Object result;
- boolean createOne = false;
- try {
- if (null != (result =
- componentExpression.getValue(context.getELContext()))) {
- // if the result is not an instance of UIComponent
- createOne = (!(result instanceof UIComponent));
- // we have to create one.
- }
- if (null == result || createOne) {
- result = this.createComponent(componentType);
- componentExpression.setValue((context.getELContext()), result);
- }
- } catch (ELException elex) {
- throw new FacesException(elex);
- }
- return (UIComponent) result;
- }
- public abstract Iterator<String> getComponentTypes();
- public abstract void addConverter(String converterId,
- public abstract void addConverter(Class targetClass,
- String converterClass);
- public abstract Converter createConverter(String converterId);
- public abstract Converter createConverter(Class targetClass);
- public abstract Iterator<String> getConverterIds();
- public ExpressionFactory getExpressionFactory() {
- Application app = getRIApplicationImpl();
- if (app != null) {
- //noinspection TailRecursion
- return app.getExpressionFactory();
- }
- throw new UnsupportedOperationException();
- }
- public Object evaluateExpressionGet(FacesContext context,
- String expression,
- Class expectedType) throws ELException {
- Application app = getRIApplicationImpl(context);
- if (app != null) {
- //noinspection TailRecursion
- return app.evaluateExpressionGet(context, expression, expectedType);
- }
- throw new UnsupportedOperationException();
- }
- public abstract MethodBinding createMethodBinding(String ref,
- Class params[])
- throws ReferenceSyntaxException;
- public abstract Iterator<Locale> getSupportedLocales();
- public abstract void setSupportedLocales(Collection<Locale> locales);
- public void addELContextListener(ELContextListener listener) {
- Application app = getRIApplicationImpl();
- if (app != null) {
- app.addELContextListener(listener);
- } else {
- throw new UnsupportedOperationException();
- }
- }
- public void removeELContextListener(ELContextListener listener) {
- Application app = getRIApplicationImpl();
- if (app != null) {
- app.removeELContextListener(listener);
- } else {
- throw new UnsupportedOperationException();
- }
- }
- public ELContextListener [] getELContextListeners() {
- Application app = getRIApplicationImpl();
- if (app != null) {
- //noinspection TailRecursion
- return app.getELContextListeners();
- } else {
- throw new UnsupportedOperationException();
- }
- }
- public abstract void addValidator(String validatorId,
- String validatorClass);
- public abstract Validator createValidator(String validatorId)
- throws FacesException;
- public abstract Iterator<String> getValidatorIds();
- public abstract ValueBinding createValueBinding(String ref)
- throws ReferenceSyntaxException;
- // --------------------------------------------------------- Private Methods
- private static Application getRIApplicationImpl(FacesContext context) {
- ExternalContext extContext;
- if (context != null) {
- extContext = context.getExternalContext();
- } else {
- extContext =
- FacesContext.getCurrentInstance().getExternalContext();
- }
- if (extContext != null) {
- return ((Application) extContext.getApplicationMap().
- get("com.sun.faces.ApplicationImpl"));
- }
- return null;
- }
- private static Application getRIApplicationImpl() {
- return getRIApplicationImpl(null);
- }
未完待续。
评论
3 楼
wst0350
2011-09-05
2 楼
haiyupeter
2009-05-13
首先我觉得你的写的对这些源码的分析还是不错的..希望以后再多写一些出来..
不过在本文中你不多讲一下生命周期里每一阶段主要是做什么的吗?
待续了那么久了..
比如第一阶段:恢复视图
第二阶段:应用请求值
第三阶段:验证请救值
第四阶段:绑定模型域
第五阶段:调用应用程序
第六阶段:渲染
然后每一阶段都挺重要的..
不过在本文中你不多讲一下生命周期里每一阶段主要是做什么的吗?
待续了那么久了..
比如第一阶段:恢复视图
第二阶段:应用请求值
第三阶段:验证请救值
第四阶段:绑定模型域
第五阶段:调用应用程序
第六阶段:渲染
然后每一阶段都挺重要的..
1 楼
chen.fa
2007-12-13
发表评论
-
IBM jsf row select
2009-07-09 19:09 1310http://www.ibm.com/developerwor ... -
jsf中使用Locale,显示本地化错误信息
2009-01-15 11:09 3393JSF 在转换和验证时都有可能会产生错误信息: 在使用标准转 ... -
JSF中制作双表尾
2008-11-21 21:42 1709最近,在项目中遇到一个制作表尾的问题,效果 如下: ... -
JSF1.2中 ValueExpression的用法
2008-05-22 23:20 4904在1.2之前,可以向下面一样使用ValueBinding: V ... -
Tomcat中如何打开Sun JSF RI 1.2中的日志
2008-05-16 00:50 3605为了更加清楚的了解JSF请求在每一个生命周期中的执行情况,我们 ... -
JSF环境配置(JDK6+Eclipse3.3+Tomcat 6.0+JSF1.2+JSTL1.1)
2008-04-25 23:14 7007第一步: 下载安装 JDK 6 Update 3 h ... -
不可不看,JSF1.2 changes
2008-03-31 17:04 4326变化还是挺多的,仔细看看,可以省掉很多郁闷的时间哦。The n ... -
JSTL 1.2 下载
2008-03-31 14:26 30775在网上找JSTL找了一会,不太好找,就放在这里一份了: 网络下 ... -
JSF 1.2中对以前JSF的修改
2008-03-31 11:00 1912Features that are unavailable ... -
JSF 各版本一览
2008-03-28 18:03 3521JSF started its journey from ve ... -
JSF 背景
2008-03-25 17:29 1793自从第一个web应用程序Struts于2001年6月发布开始, ... -
在Dreamwear中开发JSF
2008-03-09 22:49 2739可以在Dreamwear中安装JSF插件,然后利用Dreamw ... -
JSF中Exception的处理
2007-12-21 15:54 4925JSF中Exception的处理<o:p>< ... -
JSF中Exception的处理
2007-12-21 14:56 78目标: 解析错误信息,使用Globalization 来显示 ... -
Why JSF
2007-12-17 16:03 1297JavaServer Faces is extremely i ... -
源码讲解renderResponse和responseComplete的区别
2007-11-17 00:40 4491看源代码: responseComplete: ... -
如何在Maven中配置Richfaces
2007-11-08 17:41 30131.首先到这个地方下载maven http://maven. ... -
JSF 标准 转换器&验证器 文档
2007-11-02 18:50 2272下面是两篇文档 http://www.ibm.com/deve ... -
JSF 源代码赏析之FacesServlet
2007-10-30 00:08 12586学习JSF 多日,现在开始看看源代码。 首先是FacesSer ... -
Websphere 上部署Richfaces 3.10 Demo
2007-10-18 14:03 2326Websphere上部署 richfaces的demo一直有问 ...
相关推荐
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>`和`...