`
yourenyouyu2008
  • 浏览: 286784 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsf中使用jstl的注意事项,jstl在定义复合组件中的作用

    博客分类:
  • jsf
阅读更多

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必用jar包

    在这个“jsf+jstl+common”学习资源包中,包含了一些关键的库文件,对于深入理解和实践JSF开发至关重要。 1. JSF核心库:JSF的核心库通常由`javax.faces.*`命名空间的类和接口组成,这些库提供了创建、管理组件、...

    jsf/jstl/MyFaces包

    在"jsf/jstl/MyFaces包"中,包含的JSTL包意味着你可以直接在JSF应用中使用JSTL的功能。这使得开发者能够将业务逻辑与视图层更好地分离,提高代码的可读性和可维护性。 将这些包放入项目的`lib`目录,或者将其配置到...

    javaee.jar,jsf-api.jar,jsf-impl.jar,jstl-1.2.jar

    API JAR文件包含JSF的公共接口和类,允许开发者在应用程序中引用和使用JSF的功能,如创建可重用的UI组件、处理用户事件、数据绑定等。 3. **jsf-impl.jar**:与jsf-api.jar相对应,这个文件包含了JSF的实现代码。在...

    jstl jsf包合集

    【标题】"jstl jsf包合集"所涵盖的知识点主要集中在Java服务器端技术领域,特别是JSTL(JavaServer Pages Standard Tag Library)和JSF(JavaServer Faces)两个核心组件。这两个技术都是Java EE平台的重要部分,...

    jstl Jar包,包含jsf-api.jar jsf-impl.jar jstl-1.2.jar

    `jsf-api.jar`包含了JSF框架的公共接口和类,它定义了JSF的API,允许开发者在应用程序中引用和使用JSF的功能。而`jsf-impl.jar`则包含了JSF的实现,是实际运行时所需的代码,实现了API中定义的各种功能。 **jstl-...

    javaee jstl1.2 jsf

    在JavaEE中,`jstl1.2` 和 `jstl1.3` 是JavaServer Pages Standard Tag Library的两个版本,JSTL是用来简化JSP页面的编程,通过提供标准标签库来处理常见任务,如迭代、条件判断、XML处理等,从而减少脚本语言的使用...

    JSTL中文帮助文档

    - 在 MVC 框架中,如 Struts、Spring MVC 或 JSF,JSTL 可作为视图层的一部分。 通过 JSTL 中文帮助文档,开发者可以详细了解每个标签的功能、用法和示例,从而更好地掌握 JSTL,提升开发效率。学习和使用 JSTL,...

    留言板设计 JAVAEE JSF JSTL

    在描述中提到,JSTL标签被用在页面设计中,可能是用于数据展示或页面导航。 在验证方面,项目提到了使用javabean。JavaBean是一种符合特定规范的Java类,通常用作数据容器,可以封装业务逻辑和属性。在本案例中,...

    mixing jstl and jsf in web applications

    ### 混合使用 JSTL 和 JSF 在 Web 应用中的应用 #### 引言 在 Java Web 开发领域,JavaServer Pages Standard Tag Library (JSTL) 和 JavaServer Faces (JSF) 是两种非常重要的技术。尽管这两种技术在功能上存在很...

    CSDN下载-JSTL-1.2

    - `&lt;c:set&gt;`:用于在页面作用域、请求作用域、会话作用域或应用作用域中设置变量。 - `&lt;c:out&gt;`:安全地输出变量,防止XSS攻击。 - `&lt;c:if&gt;`和`&lt;c:choose&gt;`:用于条件判断,实现简单的逻辑控制。 - `&lt;c:forEach&gt;...

    jstl-1.2.rar_JSTL_jstl 1.2_jstl jar_jstl-1.1.2.jar _jstl.jar

    JSTL,全称为JavaServer Pages Standard Tag Library,是Java Web开发中的一个标准标签库,它为开发者提供了在JSP页面中处理常见任务的标签,例如迭代、条件判断、XML处理等,从而减少Java脚本的使用,提高代码的...

    JSTL包 jstl-1.2.jar standard.jar

    使用JSTL和EL,开发者可以避免在JSP页面中编写过多的Java脚本,从而实现“视图”和“逻辑”的分离,更符合MVC(Model-View-Controller)设计模式。这有利于提升代码的可维护性和团队协作效率。 集成JSTL到项目中,...

    standard.jar和jstl.jar

    JSTL Core库是JSTL中最基础的部分,它提供了许多与控制流程相关的标签,如`&lt;c:if&gt;`、`&lt;c:choose&gt;`、`&lt;c:when&gt;`、`&lt;c:otherwise&gt;`(条件判断)、`&lt;c:forEach&gt;`、`&lt;c:forTokens&gt;`(循环)、`&lt;c:set&gt;`、`&lt;c:remove&gt;`...

    jstl.jar,jstl-1.2.jar,jstl-api-1.2.jar

    标题中提到的三个文件`jstl.jar`、`jstl-1.2.jar`和`jstl-api-1.2.jar`在Java Web项目中起着关键作用: 1. **jstl.jar**:这是JSTL的核心库文件,包含了JSTL的所有实现类。当你在JSP页面中使用JSTL标签时,这个文件...

    jsf-api.jar和jsf-impl.jar

    将JSF与JSTL结合使用,开发者可以在JSF应用中利用JSTL的强大标签库来增强用户体验,例如通过JSTL进行数据迭代、条件判断,以及与数据库的交互等。这两个库在Java Web开发中起着关键作用,特别是在构建MVC架构的应用...

    JSTL最新版本(1.2.1)完整下载

    JavaServer Pages Standard Tag Library,简称JSTL,是用于Java Web开发的标准标签库,它提供了一组用于处理常见任务的标签,比如迭代、条件判断、XML处理等,从而减轻了在JSP页面中使用Java脚本的复杂性。JSTL ...

    jsf的资源jar文件,下载即可使用

    在JSF应用中,JSTL可以与其他JSF组件一起使用,提供更强大的视图层功能。例如,你可以用JSTL的`&lt;c:forEach&gt;`标签来遍历集合,或者用`&lt;c:if&gt;`标签进行条件判断。JSTL与JSF结合,可以使Web开发更加高效,同时保持代码...

    jsf1.2 jar包下载

    在使用JSF 1.2时,需要注意的是,由于这是一个较旧的版本,它可能不支持后来引入的一些新特性,如CDI(Contexts and Dependency Injection)和Faces 2.x及更高版本的组件库。因此,在现代项目中,可能需要考虑升级到...

    jstl_standard.rar

    5. **EL表达式库 (el)**:虽然EL(Expression Language)不是JSTL的一部分,但与JSTL密切配合,用于访问和操作页面作用域中的对象。 **使用JSTL的优点** 1. **提高代码可读性**:通过使用预定义的标签,可以降低...

    jsf标签使用文档

    在使用JSF开发应用之前,通常需要在页面顶部声明JSF相关的标签库,以便在后续的代码中引用这些标签库中的组件。常见的JSF标签库声明如下: ```xml &lt;%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt; ...

Global site tag (gtag.js) - Google Analytics