JSF一个最重要的特点就是组件化(It is all about components),组件化的特点决定了其可扩展性强和协议无关性。对一个JSF组件来说,为其定义特定的Render,该该组件将在WML或telnet中可用。
解读JSF的生命周期:
我觉得研究B/S系统最好的方法就是从web.xml开始,相比于传统的JSP系统,JSF需要定义一个Servlet用来对HttpServletRequest进行处理,该servlet为javax.faces.webapp.FacesServlet。在该servlet初始化阶段,它将生成两个对象:FacesContextFactory和Lifecycle。而在处理请求的service阶段,则会利用FacesContextFactory对象获得当前的FacesContext,lifecycle对象将会对该context对象进行处理。简单的来说,
FacesServlet产生一个FacesContext对象,(在JSF的处理过程中,FacesContext是唯一被修改的对象),然后将控制权交给了lifecycle对象,Lifecycle对象将会在六个生命周期中对FacesContext对象进行处理。有一点需要注意的:FacesContext是ThreadLocal的。
JSF包含六个生命周期:
- Restore view
- Apply request values; process events
- Process validations; process events
- Update model values; process events
- Invoke application; process events
- Render response
其中的1-5个阶段将会执行lifecycle的execute()方法,而第六个阶段将会执行lifecycle的render()方法。
接下来说说如何将AJAX的应用体现在JSF组件上:
1. AJAX完全独立于JSF。即为AJAX请求创建一个额外的Servlet/Filter 控制器,这也是最自然而然的想法。通过传统的ajax请求方式完成该jsf组件的ajax体现,该ajax请求通过jsf组件中写入的js触发。优点是自然,不需要接触JSF层面的东西,比较独立;缺点是重用性差,且页面开发者必须自己写js代码。
2. AJAX嵌入JSF组件中,即需要自定义组件。该方法与方法1很相似,不同的是组件开发者将会封装js代码和js请求获得的呈现代码。即ajax应用已经包装在此组件中了,页面开发者不需要关心该ajax应用是如何完成的,只需要简单调用该组件就可以了。在Lifecycle的Apply Request Values阶段,当ajax请求处理完后,该组件的Renderer将会调用FacesContext的responseComplete()方法退出lifecycle。
3. 使用PhaseListener判断是否为ajax请求,如是,立即执行responseComplete()方法,禁止进入JSF生命周期以后的Phase。看下PhaseListener接口的代码,相信用过Spring的都觉得似曾相识,没错,它提供了2个方法beforePhase()和afterPhase()用来对生命周期中的每一个phase进行pre-action和post-action处理。比较类似Spring中的advice。一般选择在PhaseListner的afterPhase()方法中进行ajax处理,处理的过程其实也很简单,当请求到达服务器端,PhaseListener进行处理,当Restore View阶段完成后如果是ajax请求则进入afterPhase()方法中,进行ajax处理然后调用FacesContext的responseComplet()方法完成lifecycle的处理。这也是目前用的最多的一种处理方法。
4. 定义独立的Lifecycle,该Lifecycle只包含三个Phase,即:Apply Request Values; Invoke Application;RenderResponse。在进入lifecycle之前就判断到底进入何种lifecycle,如果是ajax请求则进入刚定义的包含三个阶段的生命周期,否则则进入常规的六阶段生命周期。其做法就是定义一个类似FacesServlet的选择Lifecycle的servlet,对指定的ajax请求(通过url mapping)进行处理。该方法在Pro JSF and AJAX: Building Rich Internet Components一书中有详细的介绍。本文这次就不详细介绍了。
分享到:
相关推荐
ruoyi-vue-pro-vben 芋道管理后台,基于 vben 最新版本,最新的 vue3 vite4 ant-design-vue 4.0 typescript 语法进行重构开发,支持 springboot3 springcloud 版本
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
该项目是一个基于Java语言开发的水果管理系统设计源码,包含53个文件,其中包括30个Java源文件、13个XML配置文件、6个JAR包文件、1个Git忽略文件、1个属性文件以及1个SQL脚本文件。此系统旨在用于期末答辩展示,展示了开发者对Java编程和系统设计的深入理解。
java回顾、知识整理、拾遗、面试_java-review
mysql主从复制用struts2,spring,hibernate框架,搭建在线考试系统。网站支持(1)老师创建题库,创建题目,查看题目对题目进行增删改,发布考试(选择考试难中易比例),批改学生试卷,查看学生成绩。(.zip
一个基于Go语言实现的搜索引擎项目资源
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于grpc开发的跨语言的交互系统,集成BCS,Brower
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于go语言,使用gocv和socket实现摄像头视频传输项
apache-seatunnel-web-1.0.2
内容概要:本篇文章主要介绍了如何在VMware虚拟化平台上搭建并配置QNX Neutrino实时操作系统的步骤方法。文章首先给出了获取必要的安装文件来源,然后逐步指导用户如何完成QNX在虚拟机中的安装过程以及相关网络参数配置,包括选择适当的网络模式来实现宿主机器与QNX虚拟机之间的通信,具体为设置NAT模式或者桥接模式下的网络参数,如指定静态或动态获取IP地址的方法。 适用人群:对嵌入式开发感兴趣的技术人士,尤其是需要在Linux环境下开展工作的程序员和系统工程师。 使用场景及目标:通过详细的操作指南帮助初学者快速掌握在Windows或Linux主机上利用虚拟机搭建QNX Real-Time Operating System开发环境的基础技能,能够实现在该环境中运行简单的C/C++应用程序。 其他说明:本文不仅适用于QNX初学者作为入门引导资料,也为经验丰富的开发者提供了有关于特定环境配置的重要参考。由于涉及到的具体细节比较多,读者最好边操作边对照文章内容进行练习。同时要注意保持最新版本的虚拟化平台客户端和服务端程序以确保兼容性和稳定性。
stm32中dma结合ad的使用
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
低全球变暖潜能值 (GWP) 制冷剂.docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
ubuntu