JSF与JSTL TAG的互用问题
用JSF框架时,当一个JSP页面里,JSF TAG与JSTL TAG都存在的时候,它们之间有没有联系?
对此,做了以下测试(JSF 1.2 JSTL 1.2 Server:Tomcat):
JSP代码
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<HTML>
<HEAD>
</HEAD>
<f:view beforePhase="#{testBean.doMethod}">
<p>By JSF TAG
<br>
Bean Created Time :
<h:outputText value="#{testBean.beanCreateTime}" />
<br>
Bean Method Called Time :
<h:outputText value="#{testBean.methodCalledTime}" />
<br>
<br>
By JSTL TAG
<br>
Bean Created Time :
<c:out value="${testBean.beanCreateTime}"></c:out>
<br>
Bean Method Called Time :
<c:out value="${testBean.methodCalledTime}"></c:out>
<br>
<br>Test JSF TAG used in JSTL TAG
<br>
<c:if test="${not empty testBean.beanCreateTime}">Bean Created Time:<h:outputText value="#{testBean.beanCreateTime}" /><br>
</c:if>
<c:if test="${not empty testBean.methodCalledTime}">Bean Method Called Time : <h:outputText value="#{testBean.methodCalledTime}" /><br>
</c:if>
</p>
</f:view>
</HTML>
import javax.faces.event.PhaseEvent;public class TestBean {String beanCreateTime = null;String methodCalledTime = null;public TestBean() {long now = System.nanoTime();beanCreateTime = String.valueOf(now);System.out.println("beanCreateTime=" + beanCreateTime);}public void doMethod(PhaseEvent event) {long now = System.nanoTime();methodCalledTime = String.valueOf(now) + " PhaseID=" + event.getPhaseId();}public String getBeanCreateTime() {return beanCreateTime;}public void setBeanCreateTime(String time) {this.beanCreateTime = time;}public String getMethodCalledTime() {return methodCalledTime;}public void setMethodCalledTime(String initTime) {this.methodCalledTime = initTime;}
}
faces-config.xml
<managed-bean><description>TestBean</description><managed-bean-name>testBean</managed-bean-name><managed-bean-class>com.test.TestBean</managed-bean-class><managed-bean-scope>request</managed-bean-scope></managed-bean>
执行JSP页面结果如下:
Bean Created Time : 89317663431525
Bean Method Called Time : 89317686242525 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 89317663431525
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 89317663431525
可以看出
1.由JSF创建出的bean可以被JSTL TAG直接使用
2.在bean的构造函数里赋值的属性可以被JSF TAG和JSTL TAG两方使用,不会有问题(如上面的beanCreateTime)。但是在JSF TAG调用的Method里赋值的属性只可以被JSF TAG使用(如methodCalledTime)
说明bean先被JSF创建,然后优先解析JSTL TAG,再解析JSF TAG
所以JSTL TAG里面如果包含JSF TAG的话,就会有冲突
另外如果JSP里加入了如下代码用来创建bean的话
<jsp:useBean id="testBean" class="com.test.TestBean" scope="request"></jsp:useBean>
JSF TAG与jsp:useBean之间的关联发现有如下几种情况
第一种情况: 如果这里的scope是和 faces-config里定义的managed-bean-scope是一致的话,那么效果与没有这段代码时是一样的
第二种情况:当这里的scope是request,而 faces-config里是session时,执行情况如下
第一次执行 : JSF和jsp:useBean各创建一个Bean实例,JSF TAG用的是JSF创建的, JSTL用的是jsp:useBean创建的
Bean Created Time : 92738654759473
Bean Method Called Time : 92738655964375 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 92738655272946
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 92738654759473
页面刷新一次后: JSF的scope是session,所以不会再次创建,jsp:useBean会在每次刷新时重新创建一次,且会覆盖JSF创建的
Bean Created Time : 92827106721384
Bean Method Called Time : 92827107836889 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 92827106721384
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 92827106721384
第三种情况:当这里的scope是session,而 faces-config里是request时,执行情况如下
第一次执行 :
Bean Created Time : 93666788381763
Bean Method Called Time : 93666790423084 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 93666788381763
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 93666788381763
页面刷新一次后:
Bean Created Time : 93666788381763
Bean Method Called Time : 93719730795394 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 93666788381763
Bean Method Called Time : 93666790423084 PhaseID=RENDER_RESPONSE 6
Test JSF TAG used in JSTL TAG
Bean Created Time: 93666788381763
Bean Method Called Time : 93719730795394 PhaseID=RENDER_RESPONSE 6
后台bean仅以session级方式实例化一次后,在同一个session里不会再次被创建
第四种情况: 当这里的scope是page,而 faces-config里是request时,执行情况如下
第一次执行 :
JSP:
Bean Created Time : 94597696039859
Bean Method Called Time : 94597697290856 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 94597696039859
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 94597696039859
后台log:
beanCreateTime=94597696039859
页面刷新一次后:
Bean Created Time : 94736992042843
Bean Method Called Time : 94736992690970 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 94736992042843
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 94736992042843
beanCreateTime=94597696039859
beanCreateTime=94736991359795
beanCreateTime=94736992042843
从上面现象看,每次JSF与jsp:useBean各创建一个beang实例,jsp:useBean创建的覆盖JSF创建的
第五种情况: 当这里的scope是page,而 faces-config里是session时,执行情况如下
JSF创建一次后不会再次创建,jsp:useBean每次创建一个bean实例,在TAG使用上互相不干扰:
第一次执行:
Bean Created Time : 108104069197900
Bean Method Called Time : 108104070863475 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 108104069197900
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 108104069197900
beanCreateTime=108104069197900
页面刷新一次后:
Bean Created Time : 108104069197900
Bean Method Called Time : 108170882535908 PhaseID=RENDER_RESPONSE 6
By JSTL TAG
Bean Created Time : 108170881005267
Bean Method Called Time :
Test JSF TAG used in JSTL TAG
Bean Created Time: 108104069197900
beanCreateTime=108104069197900
beanCreateTime=108170881005267
JSF与JSTL TAG的互用问题相关推荐
- jsf标签,jsp标签与jstl标签
JSF通过定制标签与JSP集成.之前展示过的所有 JSF标签,<h:inputText>.<h:outputText>.<h:form> 和<f:view&g ...
- JSF 标签大全(非常详细 有例子)
1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么. 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多 ...
- 在 JSF中JSP扮演的角色
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JSF ...
- Java Server Faces(JSF)历险(一)
从今天开始研究JSF(Java Server Faces),JSF作为最新的MVC框架,得到了sun等业界技术领袖的支持,我相信JSF必然会超越Struts,Tapestry成为主流开发技术.以后的系 ...
- 关于web项目的 ajax 处理方式
2019独角兽企业重金招聘Python工程师标准>>> 传统处理方式: 这是我们最常用的 web 项目请求 - 处理流程. 主要由服务端响应用户请求,处理业务数据,生成 html 页 ...
- 如何避免JSP文件中的Java代码?
本文翻译自:How to avoid Java code in JSP files? I'm new to Java EE and I know that something like the fol ...
- [读书笔记]《Head First Servlets JSP》2nd
书名:Head First Servlets and JSP: Passing the Sun Certified Web Component Developer Exam 出版商:O'Reilly ...
- Token注解防止表单的重复提交
注解的一些基础: 参见http://blog.csdn.net/duo2005duo/article/details/50505884和 http://blog.csdn.net/duo2005duo ...
- java cookie id,我如何在Java中获取会话ID
I want to build an api in java to solve the security image problem occurred while moving one page to ...
最新文章
- Android Fragments 详细使用详细介绍
- 父类中“this” 指向问题
- linux基础,文件目录管理,cd、rm、mkdir
- GIS实用小技巧(一)-如何将RTK测量数据导入CAD中?
- 如何设置Active Directory域控制器
- PyOpenGL之3D界面详解(二)
- 红外遥控c语言,NEC协议红外遥控器
- SSL 1105——【USACO 2.1】顺序的分数(递归+二分)
- JS定义数组,初始化
- SQLite数据库的CRUD操作
- caffe编译-CUDNN_STATUS错误解决方案
- 海信电视全记录:法国再度闯入世界杯决赛,剑指蝉联冠军
- wow(3) : 宏命令
- 工业人工智能及应用研究现状及展望
- SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】
- 微信开发-错误码大全
- 固网服务器win7系统驱动,固网HU-4608驱动
- 笔记本电脑wifi连接网络不能上网有感叹号
- 上传大文件超时upstream timed out ,nginx配置修改
- FireFox插件 - Greasemonkey
热门文章
- JAVA数据加密压缩传输给服务端(Gzip加AES)
- Web前端开发必备网站
- backtracking及其应用
- Kafka常用命令之kafka-topics.sh
- 【无标题】USB2514i USB HUB使用经验总结
- cadence 16.60破解方式及文件下载地址
- 英雄联盟英雄数据son_如何为您的网站找到完美的英雄形象
- [4G5G专题-90]:流程 - 4G LTE 终端在RRC IDLE状态下的行为
- C++字符串赋值、拼接、查找、替换、存取、插入删除和子串
- 计算机cpu的字母,电脑处理器后面的字母你认识几个?不认识跟我来学学(intel篇)...