zoukankan      html  css  js  c++  java
  • jstl标签使用

    JSP 标准标记库( Standard Tag Library  JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。

    JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记,如 jsp:include 之外,定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。一旦您创建了定制标记库 ( 简称 taglib) ,当您扩展项目或转向另一个项目时您可以重复使用这些标记。您还可以将 taglib 传递给其它开发人员,从而他们可以在自己的网站上使用,或者在您 Web 应用程序的其它部分使用。

          

           JSTL 的目标是为了简化 JSP 页面的设计。对于页面设计人员来说,使用脚本语言(默认值是 JAVA 语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些, JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。

    一. 配置 JSTL

     

    包括两个 JAR 文件, jstl.jar  standard.jar (里面有标签的URI定义是什么没有必要管,重在应用( 1+1  =2 ,我们没有必要深究,只需要知道这么用就行。)。

     

    原文引入:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

    二. Core 标签库

     

    Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。在 JSP 页面使用 Core标签,要使用 taglig 指令,指定引用的标签库,如下:

    <%@ taglib uri=”http://java.sun.com/jsp/jstl/core”  prefix=”c” %>

     

    一般用途的标签有 <c:out>  <c:set>  <c:remove>  <c:cath>

    1.<c:out>

    用于计算一个表达式并将结果输出。类似于 JSP  <%=%> 表达式,或者是 EL  $ ${el-expression} 

     

    2.<c:set>

    用于设置范围变量的值或者 javabean 对象的属性。

    看个实际例子:

    <c:set var=”username” value=”lisi” scope=”session”/>

    这样就相当于设置了 session 

     

    3.<c:remove>

    相对 <c:set> 其作用是移除范围变量。比如: <c:remove var=”nusername” scope=”session”/>

     

    4.<c:catch>

     

    用于捕获在其中嵌套的操作所抛出的异常对象,并将异常信息保存到变量中。

    我们将有可能抛出异常的代码放置到开始标签 :<c:catch> 和结束标签 :</c:catch> 之间。如果其中代码出现异常,异常对象将被捕获,保存在 var 声明的变量中,该变量总是有 page 范围。如果没有发生异常,而var 所标识的范围变量将被移除。

    如果没有指定 var 属性,异常只是简单的被捕获,异常信息并不会被保存。

    Eg 

    <c:catch var=”exception”>

    <%

           int i = 5;

           int j = 0;

           int k=i/j;

    %>

    </c:catch>

    <c:out value=”${exception}” /><br>

    <c:out value=”${exception.massage}”/>

    后一句相当于: exception.getMessage()

     

    条件标签包括 <c:if><c:choose><c:when><c:otherwise>

    1.<c:if>

    用于实现 java 中的 if 语句功能。

     

    <c:if test=”${user.visitCount==1}”>

           This is your first visit .

    </c:if>

     

    若为 true ,会打印中间部分。也可以声明 var ,方便下一步判断。

    <c:if test=”${param.name==’admin’}” value=”result”/>

    <c:out value=”${result}” />

     

    2.<c:choose>

    <c:choose>  <c:when>  <c:otherwise> 一起实现互斥条件执行,类似于 java 中的 if else.

    <c:choose> 一般作为 <c:when>  <c:otherwise> 的父标签。

    eg 

    <c:choose>

           <c:when test="${row.v_money<10000}">

                  初学下海

           </c:when>

           <c:when test="${row.v_money>=10000&&row.v_money<20000}">

                  身手小试

           </c:when>

           <c:otherwise>

                  商业能手

           </c:otherwise>

    </c:choose>

     

    迭代标签 迭代标签有 <c:forEach>  </c:forEach>

     

    // 遍历记录集

    <c:forEach items="${finalResult.rows}" var="row">       

    <tr class="<%=tdClass[(rank+1)%2]%>">

    <td align="center"><span><%=rank%> </span></td>

    <td align="center"><span ><c:out value="${row.player_name}"/></span> </td>

    <td align="center"><span >  <c:out value="${row.money}"/></span></td>

    </tr>

    <%rank++;%>     

    </c:forEach> 

     

    也可以设定固定次数。

    <c:forEach var =”i” begin=”100 “ end= “110”>

           ${i}

    </c:forEach>

    如果再加个 step=  2 ”那么每次增长为 2 

    三:fn标签

    函数名 函数说明 使用举例
    fn:contains 判断字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchString)}">
    fn:containsIgnoreCase 判断字符串是否包含另外一个字符串(大小写无关) <c:if test="${fn:containsIgnoreCase(name, searchString)}">
    fn:endsWith 判断字符串是否以另外字符串结束 <c:if test="${fn:endsWith(filename, ".txt")}">
    fn:escapeXml 把一些字符转成XML表示,例如<字符应该转为&lt; ${fn:escapeXml(param:info)}
    fn:indexOf 子字符串在母字符串中出现的位置 ${fn:indexOf(name, "-")}
    fn:join 将数组中的数据联合成一个新字符串,并使用指定字符格开 ${fn:join(array, ";")}
    fn:length 获取字符串的长度,或者数组的大小 ${fn:length(shoppingCart.products)}
    fn:replace 替换字符串中指定的字符 ${fn:replace(text, "-", "&#149;")}
    fn:split 把字符串按照指定字符切分 ${fn:split(customerNames, ";")}
    fn:startsWith 判断字符串是否以某个子串开始 <c:if test="${fn:startsWith(product.id, "100-")}">
    fn:substring 获取子串 ${fn:substring(zip, 6, -1)}
    fn:substringAfter

    获取从某个字符所在位置开始的子串

    ${fn:substringAfter(zip, "-")}
    fn:substringBefore 获取从开始到某个字符所在位置的子串 ${fn:substringBefore(zip, "-")}
    fn:toLowerCase 转为小写 ${fn.toLowerCase(product.name)}
    fn:toUpperCase 转为大写字符 ${fn.UpperCase(product.name)}
    fn:trim 去除字符串前后的空格 ${fn.trim(name)}

    四:fmt标签

    fmt:requestEncoding fmt:setLocale fmt:timeZone fmt:setTimeZone fmt:bundle fmt:setBundle fmt:message fmt:param fmt:formatNumber fmt:parseNumber fmt:formatDate fmt:parseDate 

    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

    jstl fmt 函数大全

    主要功能格式化

    日期格式(2008年5月5日22点00分23秒)

    <fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒" />

    保留两位小数

    <fmt:formatNumber value="123.123456789" pattern="0.00"/>

    格式数字(45,678.234)

    <fmt:formatNumber type="number" value="45678.2345" />

    格式百分比(23%) <fmt:formatNumber type="percent" value="0.2345" />

     

    其他

    <fmt:bundle>:资源绑定。除了以前提到过的在web.xml中声明以外,还可以利用此标签。

    例<fmt:bundle basename="message"></fmt:bundle>

    <fmt:setLocale>:设置locale,主要是用于这种情况,一个中国人在国外,locale是en_US,但想用中文显示。

    例:<fmt:setLocal value="zh_CN"/>

    <fmt:message>:输出properties文件中的指定内容。

    例<fmt:message key="user"/>

    <fmt:formatNumber type="number">格式化普通数字 <fmt:formatNumber type="percent">格式化百分比

    三种数字类型参数:currency,number,percent

    <fmt:parseNumber var="i" type="number" value="45678.2345" /> <c:out value="${i}" escapeXml="false" /> 分析出数字

    <fmt:requestEncoding value="GB18030"/> 格式化文本编码

    <fmt:formatDate value="${date}" type="both" timeStyle="long" dateStyle="long" /> type="both" 输入日期也同时输出具体时间 timeStyle="long" 时间以“长”格式输出 差别:下午02时06分59秒 与 14:06:59 dateStyle="long" 日期以“长”格式输出 差别:2006年9月7日 与 2006-9-7

    四种长短参数:long,short,medium,full

    <fmt:timeZone value="${timezone}"/> 时区偏移,与上面可配合使用: <fmt:formatDate value="${d}" timeZone="${zn}" type="both" />

    <fmt:parseDate var="i" type="date" value="2006-12-11" /> <c:out value="${i}" escapeXml="false" /> 分析出时间

  • 相关阅读:
    被老板批评“公司离开谁都照转,谁的工作干不好谁走人”,你会立马辞职吗?
    开课啦 dubbo-go 微服务升级实战
    如何通过 Serverless 提高 Java 微服务治理效率?
    Alluxio 助力 Kubernetes,加速云端深度学习
    收藏!这些 IDE 使用技巧,你都知道吗
    基于 Wasm 和 ORAS 简化扩展服务网格功能
    基于 KubeVela 与 Kubernetes 打造“无限能力”的开放 PaaS
    Kubernetes 稳定性保障手册 -- 日志专题
    Kubernetes 稳定性保障手册 -- 极简版
    Serverless 如何在阿里巴巴实现规模化落地?
  • 原文地址:https://www.cnblogs.com/wangdonghua/p/3320836.html
Copyright © 2011-2022 走看看