jstl是标准的jsp标签,在jsp中使用非常方便,但却不能直接在jsf中使用,虽然表面上看起来使用没有什么区别,那是因为jsf(facelets)对jstl标签的功能进行了重新实现,以便能在jsf中正常使用。
jstl是基于标准jsp技术的,而jsf与jsp是完全不同的,jsp只是用来显示,而jsf除了显示还有更多功能,比如table的更新等。
jstl重新实现后也只是在构造页面组件树方面,他本身并不产生任何jsf组件,大家可以参考facelets中的jstl实现源码。
注意事项:
1)<c:if标签不能在<h:dataTable等具有循环性质的组件内使用。
<h:dataTable id="itemList" value="#{ents}" var="ent">
<h:column>
<f:facet name="header">long1</f:facet>
<c:if test="#{ent.double1>3}"><h:outputText value="#{ent.double1}" /></c:if>
</h:column>
其中的<h:outputText value="#{ent.double1}" />总是不能显示出来,因为<c:if只是在构造页面组件树时才执行,但是构造组件时h:dataTable 中的var是不可用的,所以#{ent.double1}是没有值的,<h:outputText value="#{ent.double1}" />不会被添加到组件树里,那么当table显示时就没法显示<h:outputText value="#{ent.double1}" />了。
但是<ui:repeat与之不同,他是个jsf组件,会被添加到组件树中,与dataTable的集中相同。
2)jstl标签应该成套使用,即if出现在foreach中是没问题的。
<c:forEach items="#{ents}" var="e">
e.double1:<h:outputText value="#{e.double1}" />\
e.double1 test:<c:if test="#{e.double1>3}"><h:outputText value="#{e.double1}" /></c:if>\
e.double1 test2:<c:if test="#{e.double1>3}">#{e.double1}</c:if>
<br/>
</c:forEach>这些都没问题
这实际上会产生很多组件到组件树里,而不像h:table那些只会产生一个组件到树里,跟table的记录数没有关系。
3)动态编程
通过循环添加多个tab,而不用在程序中添加多个tab组件到组件树中,这与直接在<rich:tabPanel 下面写几个tab效果相同。使用ui:repeat是不行的,他不会创建多个tab组件,并且将repeat组件添加到了tabPanel 下面,导致tabPanel 结构不正确
<rich:tabPanel
<c:forEach var="menu" items="#{menuBean.menuHeader}"
varStatus="status">
<rich:tab label="#{menu.label_name}" name="#{menu.label_name}" rendered="true"
id="rrr_#{status.index}" >
<a4j:support event="onlabelclick" ajaxSingle="true" actionListener="#{menuBean.tabclick}"/>
<a4j:support event="eventsQueue" ajaxSingle="true"/>
<a4j:include viewId="#{menu.url}"/>
</rich:tab>
</c:forEach>
参见faceslet源码ForEachHandler的apply方法
每到第6阶段都要执行apply方法,循环执行下面
4)定义复合组件时使用
分享到:
相关推荐
在这个“jsf+jstl+common”学习资源包中,包含了一些关键的库文件,对于深入理解和实践JSF开发至关重要。 1. JSF核心库:JSF的核心库通常由`javax.faces.*`命名空间的类和接口组成,这些库提供了创建、管理组件、...
在"jsf/jstl/MyFaces包"中,包含的JSTL包意味着你可以直接在JSF应用中使用JSTL的功能。这使得开发者能够将业务逻辑与视图层更好地分离,提高代码的可读性和可维护性。 将这些包放入项目的`lib`目录,或者将其配置到...
API JAR文件包含JSF的公共接口和类,允许开发者在应用程序中引用和使用JSF的功能,如创建可重用的UI组件、处理用户事件、数据绑定等。 3. **jsf-impl.jar**:与jsf-api.jar相对应,这个文件包含了JSF的实现代码。在...
【标题】"jstl jsf包合集"所涵盖的知识点主要集中在Java服务器端技术领域,特别是JSTL(JavaServer Pages Standard Tag Library)和JSF(JavaServer Faces)两个核心组件。这两个技术都是Java EE平台的重要部分,...
`jsf-api.jar`包含了JSF框架的公共接口和类,它定义了JSF的API,允许开发者在应用程序中引用和使用JSF的功能。而`jsf-impl.jar`则包含了JSF的实现,是实际运行时所需的代码,实现了API中定义的各种功能。 **jstl-...
在JavaEE中,`jstl1.2` 和 `jstl1.3` 是JavaServer Pages Standard Tag Library的两个版本,JSTL是用来简化JSP页面的编程,通过提供标准标签库来处理常见任务,如迭代、条件判断、XML处理等,从而减少脚本语言的使用...
- 在 MVC 框架中,如 Struts、Spring MVC 或 JSF,JSTL 可作为视图层的一部分。 通过 JSTL 中文帮助文档,开发者可以详细了解每个标签的功能、用法和示例,从而更好地掌握 JSTL,提升开发效率。学习和使用 JSTL,...
在描述中提到,JSTL标签被用在页面设计中,可能是用于数据展示或页面导航。 在验证方面,项目提到了使用javabean。JavaBean是一种符合特定规范的Java类,通常用作数据容器,可以封装业务逻辑和属性。在本案例中,...
### 混合使用 JSTL 和 JSF 在 Web 应用中的应用 #### 引言 在 Java Web 开发领域,JavaServer Pages Standard Tag Library (JSTL) 和 JavaServer Faces (JSF) 是两种非常重要的技术。尽管这两种技术在功能上存在很...
- `<c:set>`:用于在页面作用域、请求作用域、会话作用域或应用作用域中设置变量。 - `<c:out>`:安全地输出变量,防止XSS攻击。 - `<c:if>`和`<c:choose>`:用于条件判断,实现简单的逻辑控制。 - `<c:forEach>...
JSTL,全称为JavaServer Pages Standard Tag Library,是Java Web开发中的一个标准标签库,它为开发者提供了在JSP页面中处理常见任务的标签,例如迭代、条件判断、XML处理等,从而减少Java脚本的使用,提高代码的...
使用JSTL和EL,开发者可以避免在JSP页面中编写过多的Java脚本,从而实现“视图”和“逻辑”的分离,更符合MVC(Model-View-Controller)设计模式。这有利于提升代码的可维护性和团队协作效率。 集成JSTL到项目中,...
JSTL Core库是JSTL中最基础的部分,它提供了许多与控制流程相关的标签,如`<c:if>`、`<c:choose>`、`<c:when>`、`<c:otherwise>`(条件判断)、`<c:forEach>`、`<c:forTokens>`(循环)、`<c:set>`、`<c:remove>`...
标题中提到的三个文件`jstl.jar`、`jstl-1.2.jar`和`jstl-api-1.2.jar`在Java Web项目中起着关键作用: 1. **jstl.jar**:这是JSTL的核心库文件,包含了JSTL的所有实现类。当你在JSP页面中使用JSTL标签时,这个文件...
将JSF与JSTL结合使用,开发者可以在JSF应用中利用JSTL的强大标签库来增强用户体验,例如通过JSTL进行数据迭代、条件判断,以及与数据库的交互等。这两个库在Java Web开发中起着关键作用,特别是在构建MVC架构的应用...
JavaServer Pages Standard Tag Library,简称JSTL,是用于Java Web开发的标准标签库,它提供了一组用于处理常见任务的标签,比如迭代、条件判断、XML处理等,从而减轻了在JSP页面中使用Java脚本的复杂性。JSTL ...
在JSF应用中,JSTL可以与其他JSF组件一起使用,提供更强大的视图层功能。例如,你可以用JSTL的`<c:forEach>`标签来遍历集合,或者用`<c:if>`标签进行条件判断。JSTL与JSF结合,可以使Web开发更加高效,同时保持代码...
在使用JSF 1.2时,需要注意的是,由于这是一个较旧的版本,它可能不支持后来引入的一些新特性,如CDI(Contexts and Dependency Injection)和Faces 2.x及更高版本的组件库。因此,在现代项目中,可能需要考虑升级到...
5. **EL表达式库 (el)**:虽然EL(Expression Language)不是JSTL的一部分,但与JSTL密切配合,用于访问和操作页面作用域中的对象。 **使用JSTL的优点** 1. **提高代码可读性**:通过使用预定义的标签,可以降低...
在使用JSF开发应用之前,通常需要在页面顶部声明JSF相关的标签库,以便在后续的代码中引用这些标签库中的组件。常见的JSF标签库声明如下: ```xml <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> ...