美文网首页
jstl标签库

jstl标签库

作者: 咸鱼有梦想呀 | 来源:发表于2018-08-02 20:23 被阅读0次

    一、jstl标签库

    jstl是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。
    jstl不是JSP内置的标签,需要导包。

    1.jstl四大标签库

    • core
      核心标签库,重点
    • fmt
      格式化标签库,只需要学习两个标签即可;
    • sql
      数据库标签库,不需要学习了,它过时了;
    • xml
      xml标签库,不需要学习了,它过时了。

    2.导入标签库
    除了JSP动作标签外,使用其他第三方的标签库都需要
    a.导包
    b.在使用标签的JSP页面中使用taglib指令导入标签库

    导入JSTL的core标签库

    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    
    • prefix="c"
      指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c
    • uri="http://java.sun.com/jstl/core"
      指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件

    二、core标签库常用标签

    1.out和set

    • <c:out>
      输出
      • alue:可以是字符串常量,也可以是EL表达式
      • default:当要输出的内容为null时,会输出default指定的值
      • escapeXml:默认值为true,表示转义!
    举例
    • <c:set>
      设置(创建域的属性)
      • var:变量名
      • value:变量值,可以是EL表达式
      • scope:域,默认为page,可选值:page、request、session、application
    举例

    2.remove
    删除域变量

    • var:变量名
    • scope:如果不给出scope,表示删除所有域中的该名称的变量;如果指定了域,那么只删除该域的变量。
    举例

    3.url
    路径

    • value:指定一个路径!它会在路径前面自动添加项目名。
    • <c:param>: 子标签,用来给url后面添加参数
    • var:指定变量名,一旦添加了这个属性,那么url标签就不会再输出到页面,而是把生成url保存到域中。
    • scope:它与var一起使用,用来保存url。
    举例

    4.if
    if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行

    <c:set var="a" value="hello"/><!-- 在page域中创建名为a的变量 -->
    <c:if test="${not empty a}"><!--判断a变量不为null,没有指定域,表示全域 -->
      <c:out value="${a }"/>
    </c:if>
    

    5.choose
    choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。

    <c:set var="score" value="${param.score }"/>
    <c:choose>
      <c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
    <!-- if -->
      <c:when test="${score >= 90 }">A级</c:when><!-- else if -->
      <c:when test="${score >= 80 }">B级</c:when>
      <c:when test="${score >= 70 }">C级</c:when>
      <c:when test="${score >= 60 }">D级</c:when>
      <c:otherwise>E级</c:otherwise><!-- else -->
    </c:choose>
    

    6.forEach
    forEach循环标签

    • 使用循环变量,指定开始和结束值
      类似for(int i = 1; i <= 10; i++) {};

      • var:循环变量
      • begin:设置循环变量从几开始。
      • end:设置循环变量到几结束。
      • step:设置步长!等同与java中的i++,或i+=2。step默认为1

    例如:

    例1:
    <c:set var="sum" value="0" /> <!-- 创建page域属性sum为0 -->
    <c:forEach var="i" begin="1" end="10"> <!-- 设置循环变量i,初始值为1,遍历到10 -->
      <c:set var=*"sum" value="${sum + i}" /> <!-- 设置sum的值为sum + i --> 
    </c:forEach>
    <c:out  value="sum = ${sum }/>
    
    例2:
    <c:set var="sum" value="0" />
    <c:forEach var="i" begin="1" end="10" step ="2"> <!-- 步长为2,默认步长为1。相当于i+=2的意思!而默认为i++ -->
      <c:set var="sum" value="${sum + i}" />
    </c:forEach>
    <c:out value="sum = ${sum }"/>
    
    • 循环遍历集合
      类似for(Object o : 集合);

      • items:指定要循环谁,它可以是一个数组或一个集合
      • var:把数组或集合中的每个元素赋值给var指定的变量。
    <%
    String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
    pageContext.setAttribute("ns", names);
    %>
    <c:forEach var="item" items="${ns }"><!-- 把ns是中每一项赋给item. ns是被遍历的数组 -->
      <c:out value="name: ${item }"/><br/><!-- 打印每一项 -->
    </c:forEach>
    

    遍历List

    <%
     List<String> names = new ArrayList<String>();
     names.add("zhangSan");
     names.add("liSi");
     names.add("wangWu");
     names.add("zhaoLiu");
     pageContext.setAttribute("ns", names);
    %>
    <c:forEach var="item" items="${ns }"> <!-- 遍历 --> 
      <c:out value="name: ${item }"/><br/>
    </c:forEach>
    

    遍历Map

    <%
     Map<String,String> stu = new LinkedHashMap<String,String>();
     stu.put("number", "N_1001");
     stu.put("name", "zhangSan");
     stu.put("age", "23");
     stu.put("sex", "male");
     pageContext.setAttribute("stu", stu);
    %>
    <c:forEach var="item" items="${stu }"> <!-- 因为遍历的是Map,所以每一项是Entry类型 -->
      <c:out value="${item.key } : ${item.value }"/><br/> <!-- 获取Entry的key和value
     -->
    </c:forEach>
    
    • varStatus(循环状态)
      这个属性用来指定接收“循环状态”的变量名
      • count
        int类型,当前以遍历元素的个数;
      • index
        int类型,当前元素的下标;
      • first
        boolean类型,是否为第一个元素;
      • last
        boolean类型,是否为最后一个元素;
      • current
        Object类型,表示当前项目。
    <c:forEach var="item" items="${ns }" varStatus="vs"> <!-- 把循环状态赋给vs -->
      <c:if test="${vs.first }">第一行:</c:if><!-- 如果是第一行,那么${vs.first}为true -->
      <c:if test="${vs.last }">最后一行:</c:if><!-- 如果是最后一行,那么${vs.last}为true
     -->
      <c:out value="第${vs.count }行: "/><!-- 返回行数,从1开始 -->
      <c:out value="[${vs.index }]: "/><!-- 返回行数,从0开始 -->
      <c:out value="name: ${vs.current }"/><br/><!-- 当前项,与${item}相同 -->
    </c:forEach>
    

    三、fmt标签库常用标签

    fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字

    • 格式化时间
      • value:指定一个Date类型的变量
      • pattern:用来指定输出的模板!例如:yyyy-MM-dd HH:mm:ss
    <%@ taglib prefix=*"fmt"* uri=*"http://java.sun.com/jsp/jstl/fmt"* %>
    ......
    <%
     Date date = new Date();
     pageContext.setAttribute("d", date);
    %>
    <fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
    <!-- 按指定格式输出日期和时间 -->
    
    • 格式化数字
    <%
      double d1 = 3.5;
      double d2 = 4.4;
     pageContext.setAttribute("d1", d1);
     pageContext.setAttribute("d2", d2);
    %>
    <fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
    <!-- 必须且仅能保留两位小数,如果大于两位,那么只保留两位,并四舍五入,如果小于两位,那么使用0补足两位。-->
    <fmt:formatNumber value="${d2 }" pattern="#.##"/>
    <!-- 最多显示两位,如果小于两位,那么有几位保留几位,不会用0补足。大于两位,只保留两位,并四舍五入! -->
    

    相关文章

      网友评论

          本文标题:jstl标签库

          本文链接:https://www.haomeiwen.com/subject/hoksvftx.html