- 浏览: 1396917 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 多日,现在开始看看源代码。
首先是FacesServlet类了,作为一个前端控制器,每一个JSF请求都要通过FacesServlet,然后再到其他阶段,那么,FacesServlet 到底做了些什么操作呢?
头部注释说的很明白,管理请求的处理周期。至于怎么管理,下面先来看一看到底声明了什么变量
上面这些变量都是FacesServlet的全局变量,也就是整个JSF 应用的全局变量,其中最主要的我都加粗了,可以看出,主要涉及到FacesContextFactory、LifeCycle和ServletConfig对象,其中的ServletConfig对象不难理解,基于Servlet技术的表现层框架都需要这个类,而FacesContextFactory和LifeCycle则有些研究了。
FacesContextFactory是一个实现了工厂模式的抽象类,用来创建(如果没有的话)和返回一个FacesContext实例,并且把这个实例初始化,以便处理request和response对象。至于这个FacesContext对象,则是始终贯彻在JSF中的一个对象,下面自然会慢慢讲解,现在需要知道的是,FacesContext也是一个抽象类就可以。
现在先看一下FacesContextFactory对象和FacesContext的关系。顾名思义,工厂模式,就是专门生产产品的,FacesContextFactory工厂则是专门产生FacesContext对象的,FacesContextFactory对象提供了下面的方法:
来产生FacesContext对象,并且这是一个抽象方法,如何调用,则是JSF实现的事情了,并且FacesContextFactory会为每一个Request请求返回一个FacesContext对象。注意,这里用的是“返回”,而不是生成,是因为FacesContextFactory并不一定会为每一个请求生成一个新的FacesContext对象,FacesContext对象有一个release方法,这个方法负责释放FacesContext的资源,在调用这个方法之前,通过FacesContext.getCurrentInstance可以返回当前线程上的实例,这样实现FacesContext在某种程度上的重用和pool。
下面应该来看看在FacesServlet中如何调用FacesContextFactory来产生一个FacesContext对象了。
首先要产生一个FacesContextFactory对象,这是通过FacesServlet的init方法来实现的:
在这个init方法中,FacesServlet通过FactoryFinder对象来创建一个具体的Factory对象,这样就把创建Factory对象的工作给托管给其他的类了,同时这个FactoryFinder还可以创建其他的工厂类,因此可以说FactoryFinder是“工厂的工厂”,是专门创造工厂的类。通过FactoryFinder.FACES_CONTEXT_FACTORY参数指明是创建FacesContextFactory,FactoryFinder就给创建出一个FacesContextFactory。
下面我们就来看看FactoryFinder是通过什么算法,来查找和创建JSF实现中的各个工厂类。
FactoryFinder通过实现标准的发现算法,可以查找所有在JSF API中指定的factory对象,这个算法是这样的:
1.如果web应用的WEB-INF目录下存在JSF的configuration 文件,并且含有factory节点,而且这个factory节点中含有正在查找的factory对象的类名称,那么就加载这个类。
2.如果在ServletContext的初始化参数中有
3.如果在ServletContext的资源目录下的Jar包中的 META-INF目录下含有JSF配置文件,并且正在查找的factory类名存在于factory节点中,则加载这个类。最晚加载的类优先。
4.如果META-INF/service/目录下有当前正在查找的类名称,会加载之。
5.如果上面的规则都没有匹配,则会使用JSF实现中的特定类。
下面的事情就是LifecycleFactory的加载了,其加载过程不必多言。
LifecycleFactory对象加载后,会查找JSF中是否配置了javax.faces.LIFECYCLE_ID参数,根据这个参数加载lifecycleId,整个过程是这样的:
首先是FacesServlet类了,作为一个前端控制器,每一个JSF请求都要通过FacesServlet,然后再到其他阶段,那么,FacesServlet 到底做了些什么操作呢?
文件头部的注释
- /**
- *
FacesServlet is a servlet that manages the request
- * processing lifecycle for web applications that are utilizing JavaServer
- * Faces to construct the user interface.
- */
变量
- public static final String CONFIG_FILES_ATTR =
- "javax.faces.CONFIG_FILES";
- public static final String LIFECYCLE_ID_ATTR =
- "javax.faces.LIFECYCLE_ID";
- private static final Logger LOGGER =
- Logger.getLogger("javax.faces.webapp", "javax.faces.LogStrings");
- private FacesContextFactory facesContextFactory = null;
- private Lifecycle lifecycle = null;
- private ServletConfig servletConfig = null;
上面这些变量都是FacesServlet的全局变量,也就是整个JSF 应用的全局变量,其中最主要的我都加粗了,可以看出,主要涉及到FacesContextFactory、LifeCycle和ServletConfig对象,其中的ServletConfig对象不难理解,基于Servlet技术的表现层框架都需要这个类,而FacesContextFactory和LifeCycle则有些研究了。
FacesContextFactory是一个实现了工厂模式的抽象类,用来创建(如果没有的话)和返回一个FacesContext实例,并且把这个实例初始化,以便处理request和response对象。至于这个FacesContext对象,则是始终贯彻在JSF中的一个对象,下面自然会慢慢讲解,现在需要知道的是,FacesContext也是一个抽象类就可以。
现在先看一下FacesContextFactory对象和FacesContext的关系。顾名思义,工厂模式,就是专门生产产品的,FacesContextFactory工厂则是专门产生FacesContext对象的,FacesContextFactory对象提供了下面的方法:
FacesContextFactory
- public abstract FacesContext getFacesContext
- (Object context, Object request,
- Object response, Lifecycle lifecycle)
- throws FacesException;
来产生FacesContext对象,并且这是一个抽象方法,如何调用,则是JSF实现的事情了,并且FacesContextFactory会为每一个Request请求返回一个FacesContext对象。注意,这里用的是“返回”,而不是生成,是因为FacesContextFactory并不一定会为每一个请求生成一个新的FacesContext对象,FacesContext对象有一个release方法,这个方法负责释放FacesContext的资源,在调用这个方法之前,通过FacesContext.getCurrentInstance可以返回当前线程上的实例,这样实现FacesContext在某种程度上的重用和pool。
下面应该来看看在FacesServlet中如何调用FacesContextFactory来产生一个FacesContext对象了。
首先要产生一个FacesContextFactory对象,这是通过FacesServlet的init方法来实现的:
FacesServlet的init方法
- public void init(ServletConfig servletConfig) throws ServletException {
- // Save our ServletConfig instance
- this.servletConfig = servletConfig;
- // Acquire our FacesContextFactory instance
- try {
- facesContextFactory = (FacesContextFactory)
- FactoryFinder.getFactory
- (FactoryFinder.FACES_CONTEXT_FACTORY);
- } catch (FacesException e) {
- ResourceBundle rb = LOGGER.getResourceBundle();
- String msg = rb.getString("severe.webapp.facesservlet.init_failed");
- Throwable rootCause = (e.getCause() != null) ? e.getCause() : e;
- LOGGER.log(Level.SEVERE, msg, rootCause);
- throw new UnavailableException(msg);
- }
- // Acquire our Lifecycle instance
- try {
- LifecycleFactory lifecycleFactory = (LifecycleFactory)
- FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
- String lifecycleId ;
- // First look in the servlet init-param set
- if (null == (lifecycleId = servletConfig.getInitParameter(LIFECYCLE_ID_ATTR))) {
- // If not found, look in the context-param set
- lifecycleId = servletConfig.getServletContext().getInitParameter
- (LIFECYCLE_ID_ATTR);
- }
- if (lifecycleId == null) {
- lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
- }
- lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
- } catch (FacesException e) {
- Throwable rootCause = e.getCause();
- if (rootCause == null) {
- throw e;
- } else {
- throw new ServletException(e.getMessage(), rootCause);
- }
- }
- }
在这个init方法中,FacesServlet通过FactoryFinder对象来创建一个具体的Factory对象,这样就把创建Factory对象的工作给托管给其他的类了,同时这个FactoryFinder还可以创建其他的工厂类,因此可以说FactoryFinder是“工厂的工厂”,是专门创造工厂的类。通过FactoryFinder.FACES_CONTEXT_FACTORY参数指明是创建FacesContextFactory,FactoryFinder就给创建出一个FacesContextFactory。
下面我们就来看看FactoryFinder是通过什么算法,来查找和创建JSF实现中的各个工厂类。
FactoryFinder通过实现标准的发现算法,可以查找所有在JSF API中指定的factory对象,这个算法是这样的:
1.如果web应用的WEB-INF目录下存在JSF的configuration 文件,并且含有factory节点,而且这个factory节点中含有正在查找的factory对象的类名称,那么就加载这个类。
2.如果在ServletContext的初始化参数中有
javax.faces.CONFIG_FILES
参数,并且这个参数值指定的配置文件中有factory节点,并且这个节点中含有目前正在查找的factory类名,那么就加载这个对象。3.如果在ServletContext的资源目录下的Jar包中的 META-INF目录下含有JSF配置文件,并且正在查找的factory类名存在于factory节点中,则加载这个类。最晚加载的类优先。
4.如果META-INF/service/目录下有当前正在查找的类名称,会加载之。
5.如果上面的规则都没有匹配,则会使用JSF实现中的特定类。
这种算法的缺点就是每一个Web应用都会有一个自己的factory实例,不管这个JSF实现是包含在Web应用chengx程序之中还是在容器中作为一个共享库存在。
这个FactoryFinder还是蛮复杂的,以后有时间将另外撰文研究。下面的事情就是LifecycleFactory的加载了,其加载过程不必多言。
LifecycleFactory对象加载后,会查找JSF中是否配置了javax.faces.LIFECYCLE_ID参数,根据这个参数加载lifecycleId,整个过程是这样的:
加载LifecycleFactory
- // Acquire our Lifecycle instance
- try {
- LifecycleFactory lifecycleFactory = (LifecycleFactory)
- FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
- String lifecycleId ;
- // First look in the servlet init-param set
- if (null == (lifecycleId = servletConfig.getInitParameter(LIFECYCLE_ID_ATTR))) {
- // If not found, look in the context-param set
- lifecycleId = servletConfig.getServletContext().getInitParameter
- (LIFECYCLE_ID_ATTR);
- }
- if (lifecycleId == null) {
- lifecycleId = LifecycleFactory.DEFAULT_LIFECYCLE;
- }
- lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
- } catch (FacesException e) {
- Throwable rootCause = e.getCause();
- if (rootCause == null) {
- throw e;
- } else {
- throw new ServletException(e.getMessage(), rootCause);
- }
- }
通过加载不同实现的LifecycleFactory对象,就可以允许加载不同的Lifecycle对象,这对于扩展JSF的功能是非常重要的,
当没有显示表明lifecycleId时,lifecycleFactory就会加载默认的lifecycleId,并根据lifecycleId加载Lifecycle对象
Lifecycle类负责JSF请求处理的全过程,主要是通过执行其中的execute方法和render方法实现的,FacesServlet的service方法很好的说明了这一点:
java 代码
- public void service(ServletRequest request,
- ServletResponse response)
- throws IOException, ServletException {
- // If prefix mapped, then ensure requests for /WEB-INF are
- // not processed.
- String pathInfo = ((HttpServletRequest) request).getPathInfo();
- if (pathInfo != null) {
- pathInfo = pathInfo.toUpperCase();
- if (pathInfo.startsWith("/WEB-INF/")
- || pathInfo.equals("/WEB-INF")
- || pathInfo.startsWith("/META-INF/")
- || pathInfo.equals("/META-INF")) {
- ((HttpServletResponse) response).
- sendError(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- }
- // Acquire the FacesContext instance for this request
- FacesContext context = facesContextFactory.getFacesContext
- (servletConfig.getServletContext(), request, response, lifecycle);
- // Execute the request processing lifecycle for this request
- try {
- lifecycle.execute(context);
- lifecycle.render(context);
- } catch (FacesException e) {
- Throwable t = e.getCause();
- if (t == null) {
- throw new ServletException(e.getMessage(), e);
- } else {
- if (t instanceof ServletException) {
- throw ((ServletException) t);
- } else if (t instanceof IOException) {
- throw ((IOException) t);
- } else {
- throw new ServletException(t.getMessage(), t);
- }
- }
- }
- finally {
- // Release the FacesContext instance for this request
- context.release();
- }
- }
好了,FacesServlet的源码我们就看到这里,下一篇中我们将深入研究Lifecycle对象的执行过程,在最后,就让我们用myFaces的FacesServlet实现来结束吧:
myfaces之FacesServlet:
- public final class FacesServlet implements Servlet {
- private static final Log log = LogFactory.getLog(FacesServlet.class);
- public static final String CONFIG_FILES_ATTR = "javax.faces.CONFIG_FILES";
- public static final String LIFECYCLE_ID_ATTR = "javax.faces.LIFECYCLE_ID";
- private static final String SERVLET_INFO = "FacesServlet of the MyFaces API implementation";
- private ServletConfig _servletConfig;
- private FacesContextFactory _facesContextFactory;
- private Lifecycle _lifecycle;
- public FacesServlet() {
- super();
- }
- public void destroy() {
- _servletConfig = null;
- _facesContextFactory = null;
- _lifecycle = null;
- if (log.isTraceEnabled())
- log.trace("destroy");
- }
- public ServletConfig getServletConfig() {
- return _servletConfig;
- }
- public String getServletInfo() {
- return SERVLET_INFO;
- }
- private String getLifecycleId() {
- String lifecycleId = _servletConfig.getServletContext()
- .getInitParameter(LIFECYCLE_ID_ATTR);
- return lifecycleId != null ? lifecycleId
- : LifecycleFactory.DEFAULT_LIFECYCLE;
- }
- public void init(ServletConfig servletConfig) throws ServletException {
- if (log.isTraceEnabled())
- log.trace("init begin");
- _servletConfig = servletConfig;
- _facesContextFactory = (FacesContextFactory) FactoryFinder
- .getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
- // TODO: null-check for Weblogic, that tries to initialize Servlet
- // before ContextListener
- // Javadoc says: Lifecycle instance is shared across multiple
- // simultaneous requests, it must be implemented in a thread-safe
- // manner.
- // So we can acquire it here once:
- LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder
- .getFactory(FactoryFinder.LIFECYCLE_FACTORY);
- _lifecycle = lifecycleFactory.getLifecycle(getLifecycleId());
- if (log.isTraceEnabled())
- log.trace("init end");
- }
- public void service(ServletRequest request, ServletResponse response)
- throws IOException, ServletException {
- HttpServletRequest httpRequest = ((HttpServletRequest) request);
- String pathInfo = httpRequest.getPathInfo();
- // if it is a prefix mapping ...
- if (pathInfo != null
- && (pathInfo.startsWith("/WEB-INF") || pathInfo
- .startsWith("/META-INF"))) {
- StringBuffer buffer = new StringBuffer();
- buffer.append(" Someone is trying to access a secure resource : "
- + pathInfo);
- buffer
- .append("\n remote address is "
- + httpRequest.getRemoteAddr());
- buffer.append("\n remote host is " + httpRequest.getRemoteHost());
- buffer.append("\n remote user is " + httpRequest.getRemoteUser());
- buffer.append("\n request URI is " + httpRequest.getRequestURI());
- log.warn(buffer.toString());
- // Why does RI return a 404 and not a 403, SC_FORBIDDEN ?
- ((HttpServletResponse) response)
- .sendError(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- if (log.isTraceEnabled())
- log.trace("service begin");
- FacesContext facesContext = _facesContextFactory.getFacesContext(
- _servletConfig.getServletContext(), request, response,
- _lifecycle);
- try {
- _lifecycle.execute(facesContext);
- _lifecycle.render(facesContext);
- } catch (Throwable e) {
- if (e instanceof IOException) {
- throw (IOException) e;
- } else if (e instanceof ServletException) {
- throw (ServletException) e;
- } else if (e.getMessage() != null) {
- throw new ServletException(e.getMessage(), e);
- } else {
- throw new ServletException(e);
- }
- } finally {
- facesContext.release();
- }
- if (log.isTraceEnabled())
- log.trace("service end");
- }
- }
评论
7 楼
will-vip
2009-02-01
看了一些思想,mark下
6 楼
thc
2008-09-13
谢谢你!写的很好!
5 楼
keypoint
2008-04-05
主人太立了,希望看到你更多源码赏析系列!!!
4 楼
bochuxt
2008-02-20
谢谢你,我已经打印你的文章拜读,再次感谢你的辛勤劳动.希望多出好文章.
3 楼
hintcnuie
2008-01-31
这个源代码都是可以download下来的啊,Sun的,myFaces的,都可以
2 楼
hspeed
2008-01-13
晕死,找到下源码的地方了。。。。。。。。
https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList?expandFolder=6512&folderID=7028
有需要的朋友去下吧,研究出成果记得分享哦,哈
jsf-1.2_04-b07-FCS-src.zip
https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList?expandFolder=6512&folderID=7028
有需要的朋友去下吧,研究出成果记得分享哦,哈
jsf-1.2_04-b07-FCS-src.zip
1 楼
hspeed
2008-01-11
强人啊,请问你这源码是哪来的啊,不会是反编译的吧
希望看到你更多的研究成果啊
希望看到你更多的研究成果啊
发表评论
-
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: ... -
JSF 源代码赏析之Lifecycle
2007-11-15 23:41 5945JSF的生命周期在JSF ... -
如何在Maven中配置Richfaces
2007-11-08 17:41 30131.首先到这个地方下载maven http://maven. ... -
JSF 标准 转换器&验证器 文档
2007-11-02 18:50 2272下面是两篇文档 http://www.ibm.com/deve ... -
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)来声明这些组件。每个组件都有自己的生命周期和属性,可以与后端的数据模型绑定,实现...
**JSF 2.0 源代码详解** JavaServer Faces (JSF) 是一个用于构建Web用户界面的Java框架,由Sun Microsystems(现已被Oracle收购)开发并维护。JSF 2.0是该框架的一个重要版本,它带来了许多改进和新特性,提升了...
**JSF 1.2 源代码详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,它提供了一种组件化的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,发布于2007年,带来了许多增强功能和改进,...
**标题“Core JSF源代码”** 提供的源码可能是书中示例代码的集合,这些代码可以帮助读者更直观地理解书中讲解的概念和技术。通过分析和运行这些源码,开发者可以更好地学习JSF的实践操作和工作原理。 **描述中的...
**JSF 1.2.07 源代码详解** JavaServer Faces (JSF) 是Java平台上用于构建用户界面的官方标准框架,它提供了一种声明式的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,引入了许多增强功能和改进,为...
在这个"JSF实例源代码下载"中,我们有机会深入学习和理解JSF的工作原理及其应用。 1. **JSF框架概述**:JSF设计的主要目标是简化服务器端的Web开发,通过提供可重用的UI组件和事件处理机制。JSF生命周期包括六步:...
这个"JSF入门实例 源代码"是专门为初学者设计的,帮助他们快速理解并掌握JSF的基本概念和用法。下面我们将深入探讨JSF的核心特性、工作原理以及如何通过给定的实例进行学习。 1. JSF概述: JSF是一种官方支持的...
**JSF(JavaServer Faces)** 是Java平台上的一种用于...通过研究源代码,你可以了解如何将用户界面与后端服务集成,以及如何处理复杂的文件I/O和数据库操作。此外,这个实例也可以作为你自定义文件管理系统的起点。
**JSF IN ACTION 源代码详解** "JSF IN ACTION 源代码" 是一本深入探讨JavaServer Faces(JSF)技术的书籍的配套源码。这本书籍旨在帮助开发者全面理解JSF框架,通过实践代码来提升技能。源代码的提供意味着读者...
在本例中,我们有一个完整的JSF博客源代码,该源码使用了Apache Derby数据库,特别适合初学者用来学习JSF的基础知识和实际应用。** **1. JSF框架详解** JSF的核心概念是组件模型,它允许开发者通过拖放UI组件来构建...
richface,jsf源码。相当不错的资料。特别是richface.里面有不错的例子。放到tomcat下可以直接运行啊。
本资源包含的是《JSF编程》一书第二章的配套源代码,这将有助于读者深入理解JSF的工作原理和实践应用。 在JSF中,一个关键概念是UI组件。这些组件可以是简单的HTML元素,如按钮和文本输入,也可以是复杂的自定义...
《JSF in Action》是一本深入探讨JavaServer Faces(JSF)框架的权威书籍,而提供的源代码(6-10章)则是该书实践部分的重要组成部分。JSF是Java平台上的一个用于构建Web应用程序的组件模型框架,它极大地简化了用户...
这个“JSF完全参考手册源代码”很可能包含了详细的示例和实现,帮助开发者深入理解JSF的工作原理以及如何在实际项目中应用。 在描述中提到的“jsf完全参考手册中的源代码”,暗示了这是一个学习资源,它可能包括了...
在你所拥有的"JSF(java server faces)开源框架的源代码"压缩包中,包含的是JSF 1.1版本的源码,这对于深入理解和学习这个框架有着重要的价值。 首先,让我们来看看JSF框架的基础结构和主要组成部分: 1. **组件...
**JSF编程 光盘 源代码 3** JavaServer Faces(JSF)是一种用于构建Web用户界面的Java EE框架,它简化了创建复杂的、数据驱动的Web应用程序的过程。这个压缩包文件“JSF编程 光盘 源代码 3”提供了《JSF编程》一书...