zoukankan      html  css  js  c++  java
  • Jsp--JSTL标签库(core、fmt)

    什么是JSTL

      JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!

    JSTL标签使用以来非常方便,它与JSP动作标签一定,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已!

    JSTL标签库

      JSTL一共包含四大标签库:

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

    使用taglib指令导入标签库

    除了JSP动作标签外,使用其他第三方的标签库都需要:

    1、导包;(jstl.jar、standard.jar)

    2、在使用标签的JSP页面中使用taglib指令导入标签库;<%@ 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

      语法: <c:out  value=”值/EL表达式” >   

      可选属性:   Default:  默认值,    escapeXml: 当escapeXml为false,不会转换“<”、“>”。

    这可能会受到JavaScript攻击,与EL表达式的结果一样,   为true, 转换“<”、“>”, 浏览器不会解析为js代码. 默认值true

    <c:out value="${str }" default="没有数据" escapeXml="false"></c:out>

    2) Set标签:  往域中存放数据, 等同于  setAttribute()

      语法:<c:set var=”属性名” value=”属性值”>

      可选属性:  scope :  往哪一个域中存放数据, 默认page域

    <c:set  var="str"  value="requestStr" scope="request" ></c:set>

    3) remove  删除域中数据,  等同于  removeAttribute()

      语法: <c:remove  var=”删除的属性名”>   表示全域删除

      可选属性: scope:  删除指定域

    <c:remove var="str" scope="page"/>

    4) Url 构建url

      语法: <c:url  value=”/路径”>    只要以”/”开头, 自动加/项目名

     <c:url value="/xxx?name=xx&age=21"></c:url>
     <!-- 待参数(传值可加一个a标签) -->
         <c:url value="/xxx">
            <c:param name="name" value="lisi"></c:param>
            <c:param name="age" value="23"></c:param>
         </c:url>

    5)if标签   条件标签, 没有else    ***

    语法:   <c:if  test=”条件”>

                    //.... 其他标签

               </c:if>

    <c:if test="${3>2}">
         <h1>3大于2</h1>
    </c:if>    

    6)Choose   等同于 if  else if  else if .....  else    ***

      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>
        <c:when test="${score >= 80 }">A级</c:when>
        <c:when test="${score >= 60 }">B级</c:when>
        <c:otherwise>C级</c:otherwise>
    </c:choose>

    7)forEach 标签    ***

    A. 普通for循环 ,类似for(int i = 0; i<10;i++)

    语法: <c:foreach  var=”循环变量名” begin=”开始值”  end=”结束值”>      step: 步长, 默认值1 , 每次加1

    <c:forEach var="i" begin="0" end="10"  step="2">
         ${i } <br/>
    </c:forEach>

    B.增强for循环,类似for(Object o : 集合);

    遍历集合或数组方式:
    <%
      String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
      pageContext.setAttribute("ns", names);
    %>
    <c:forEach var="item" items="${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 }">
        <c:out value="${item.key }: ${item.value }"/><br/>
    </c:forEach>

      forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,

    例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了。

    •   count:int类型,当前以遍历元素的个数
    •   index:int类型,当前元素的下标;
    •   first:boolean类型,是否为第一个元素;
    •   last:boolean类型,是否为最后一个元素;
    •   current:Object类型,表示当前项目。
    <c:forEach var="item" items="${ns }" varStatus="vs">
        <c:if test="${vs.first }">第一行:</c:if>
        <c:if test="${vs.last }">最后一行:</c:if>
        <c:out value="第${vs.count }行: "/>
        <c:out value="[${vs.index }]: "/>
        <c:out value="name: ${vs.current }"/><br/>
    </c:forEach>

     8)重定向标签

    语法: <c:redirect url="">

       <!-- 重定向标签
             JSTL标签, url 写的以/开头, 自动添加/项目名
             url:底层使用的c:url, 自动把jsessionId 通过url 带回到服务器, URL重写
             Session: 把SessionId存在客户端:
               1) Cookie 
               2) URL重写, sessionId通过url传递   
         -->
    <%-- <c:redirect url="/demo2.jsp?name=zs&age=21"></c:redirect>  --%>
    <%--  
     <c:redirect url="/demo2.jsp">
         <c:param name="name" value="lisi"></c:param>
         <c:param name="age" value="21"></c:param>
     </c:redirect> --%>

    9)转发

    转发:  <jsp:forward  page=”转发的资源路径”>  请求转发,

    fmt标签库

      必须先导入:<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

    1)日期格式化

    语法: <fmt:formatDate value="${now }" pattern="yyyy-MM-dd "/>   

      value: 值
      pattern: 格式化字符串

     <% Date now = new Date();
        request.setAttribute("now", now);  %>
    <fmt:formatDate value="${now }" pattern="yyyy-MM-dd "/>

    2)数字格式化

      保留多少位小数位, 四舍五入
      格式字符串 : 0表示任意字符串, 小数位位数不够, 使用0补位
            #表示任意字符串 小数位位数不够, 不会使用0补位

     <% double d = 12.3;
        request.setAttribute("d", d); %>
    <fmt:formatNumber value="${d }" pattern="0.00"></fmt:formatNumber>
    <fmt:formatNumber value="${d }" pattern="#.##"></fmt:formatNumber>

    0.00 --> 12.30

    #.## --> 12.3

  • 相关阅读:
    WCF中的序列化[下篇]
    WCF中的序列化[上篇]
    SET TRANSACTION ISOLATION LEVEL 详解
    深入探讨数据仓库建模与ETL的实践技巧
    用SQL语句添加删除修改字段等操作
    WCF数据契约与序列化
    在SQL Server中使用检查约束来验证数据
    C#线程同步的几种方法[转]
    Linq的Join用法
    测试wlm代码高亮插件
  • 原文地址:https://www.cnblogs.com/64Byte/p/12891068.html
Copyright © 2011-2022 走看看