用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页面结果如下:
By JSF TAG
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创建的
By JSF TAG
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创建的
By JSF TAG
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时,执行情况如下
第一次执行 :
By JSF TAG
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
页面刷新一次后:
By JSF TAG
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:
By JSF TAG
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=94597695412126
beanCreateTime=94597696039859
页面刷新一次后:
By JSF TAG
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=94597695412126
beanCreateTime=94597696039859
beanCreateTime=94736991359795
beanCreateTime=94736992042843
从上面现象看,每次JSF与jsp:useBean各创建一个beang实例,jsp:useBean创建的覆盖JSF创建的
第五种情况: 当这里的scope是page,而 faces-config里是session时,执行情况如下
JSF创建一次后不会再次创建,jsp:useBean每次创建一个bean实例,在TAG使用上互相不干扰:
第一次执行:
By JSF 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=108104068334383
beanCreateTime=108104069197900
页面刷新一次后:
By JSF TAG
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=108104068334383
beanCreateTime=108104069197900
beanCreateTime=108170881005267
分享到:
相关推荐
通过这个学习资源包,你可以深入学习JSF的基础概念,了解如何配置和使用JSF应用,以及如何结合JSTL和EL来构建动态页面。通过实践,你可以掌握如何处理表单提交、验证用户输入、管理页面导航等关键技能。
在"jsf/jstl/MyFaces包"中,包含的JSTL包意味着你可以直接在JSF应用中使用JSTL的功能。这使得开发者能够将业务逻辑与视图层更好地分离,提高代码的可读性和可维护性。 将这些包放入项目的`lib`目录,或者将其配置到...
开发者在使用这些库时,需要确保它们与运行环境的Java EE服务器版本兼容,以避免潜在的兼容性问题。在实际项目中,这些库通常会被添加到Web应用的类路径(Classpath)中,以便服务器在运行时能够正确识别和加载所需...
【标题】"jstl jsf包合集"所涵盖的知识点主要集中在Java服务器端技术领域,特别是JSTL(JavaServer Pages Standard Tag Library)和JSF(JavaServer Faces)两个核心组件。这两个技术都是Java EE平台的重要部分,...
`jstl1.2` 和 `jstl1.3` 是JavaServer Pages Standard Tag Library的两个版本,JSTL是用来简化JSP页面的编程,通过提供标准标签库来处理常见任务,如迭代、条件判断、XML处理等,从而减少脚本语言的使用。...
JavaEE留言板设计是一个基于Web的应用程序开发项目,它利用了Java企业版(JavaEE)的多项核心技术,包括JSF(JavaServer Faces)和JSTL(JavaServer Pages Standard Tag Library)。这个课程设计旨在帮助学生或者...
JSTL 1.2是一个广泛使用的版本,因为它具有良好的稳定性和兼容性,并且与各种Servlet容器如Tomcat、Jetty等良好集成。 使用JSTL的主要优点包括: 1. **提高代码质量**:通过使用预定义的标签,可以减少JSP页面中的...
### 混合使用 JSTL 和 JSF 在 Web 应用中的应用 #### 引言 在 Java Web 开发领域,JavaServer Pages Standard Tag Library (JSTL) 和 JavaServer Faces (JSF) 是两种非常重要的技术。尽管这两种技术在功能上存在很...
将JSF与JSTL结合使用,开发者可以在JSF应用中利用JSTL的强大标签库来增强用户体验,例如通过JSTL进行数据迭代、条件判断,以及与数据库的交互等。这两个库在Java Web开发中起着关键作用,特别是在构建MVC架构的应用...
**JSTL(JavaServer Pages Standard Tag Library)中文帮助文档** JSTL 是一套用于 JavaServer Pages (JSP) 的标准标签库,旨在简化 JSP 开发,提高代码的可读性和可维护性。它提供了多种核心标签和扩展标签,包括...
JSTL与JSF结合使用,可以增强JSF应用的表达能力,使得开发者能更方便地在视图层进行逻辑控制,而无需过多地编写Java代码。 4. **javaee.jar**: 这个JAR文件通常包含Java EE(Enterprise Edition)的API,提供了...
- JSTL与EL(Expression Language)结合使用,可以更高效地处理数据。 - 避免在JSP页面中混用JSTL和脚本元素,以保持良好的编程习惯。 - JSTL不支持所有的Java语法,对于复杂的逻辑,可能需要配合JavaBean或...
在JSF应用中,JSTL可以与其他JSF组件一起使用,提供更强大的视图层功能。例如,你可以用JSTL的`<c:forEach>`标签来遍历集合,或者用`<c:if>`标签进行条件判断。JSTL与JSF结合,可以使Web开发更加高效,同时保持代码...
描述中提到,`jstl.jar` 是用于Java Web开发的标准标签库,这意味着它可以与其他Java Web技术,如Servlet、JSP、JSF等协同工作,使得开发更加高效。在实际应用中,通常会将`jstl.jar` 放入Web应用的`WEB-INF/lib` ...
JSTL 1.2是该库的一个版本,它与JSF结合使用时,可以帮助开发者减少在JSP页面中的脚本量,提高代码的可读性和维护性。 "javaee"则指的是Java Enterprise Edition,它是Java平台的服务器端版本,包含了开发企业级Web...
`jstl.jar`和`javax.servlet.jsp.jstl.jar`提供了JSTL库,包含了一系列用于处理常见任务的标签,如条件判断、迭代、国际化等,与JSF结合使用可以增强视图的可读性和维护性。 9. **其他辅助库**: 为了支持一些...
此外,JSTL还与其他Java Web技术,如Servlet、JSF(JavaServer Faces)、Spring MVC等,有着良好的兼容性。在实际开发中,JSTL经常与其他框架结合使用,以实现更高效、更规范的Web应用开发。 总的来说,JSTL是Java ...
为了提高JSP页面的可读性和可维护性,JSTL(JSP Standard Tag Library)应运而生。JSTL是一套标准的标签库,它提供了一系列预定义的标签,可以简化常见的任务,如控制流程、XML处理、SQL查询等,从而减少开发者使用...
JavaServer Pages Standard Tag Library,简称JSTL,是用于Java Web开发的标准标签库,它提供了一组用于处理常见任务的标签,比如迭代、条件判断、XML处理等,从而减轻了在JSP页面中使用Java脚本的复杂性。JSTL ...
4. **与JSF兼容**:JSTL与JavaServer Faces(JSF)框架可以很好地集成。 **jstl.jar和standard.jar** 在"jstl_standard.rar"中,包含了两个关键的JAR文件: - `jstl.jar`:包含了JSTL的核心标签库实现,包括Core、...