JSP之JSTL标签

部分参考自:https://blog.csdn.net/qq_25827845/article/details/53311722

一、简介

  JSTL是一个定制标签类库的集合,可以用于迭代或者集合,条件测试,数据库操作等。是EL表达式的扩展,与EL配合使用可以使JSP页面几乎没有Java代码。

二、使用

  现在JSTL的版本为1.2,使用需要导入两个jar包,一个是jstl.jar,另外一个是standard.jar,放在lib目录下。

  在使用jstl的页面用taglib指令使用指定类库,这里使用core库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>。

  prefix为标签的前缀,可以为任何内容,但是建议使用c,uri为指定标签库的uri地址。

三、JSTL标签库

  JSTL总共有四大标签库,分别为:

  core:核心标签库,主要内容。

  fmt:格式化标签库,其中格式化数字和格式化时间较常用。

  sql和xml基本不使用。

四、core类库:

  1. out标签

    (1) 格式:<c:out value="value" [escapeXml="true|false"] [default="defaultValue"] />  (下划线表示默认值)

      value的值可以是任意字符,也可以是EL表达式,注意如果在EL表达式中也有双引号会报错,故EL表达式中要用单引号代替双引号。

      escapeXml默认为true,表明value中结果字符<、>、&、‘、“将会被转换成相应的字符实体代码&lt等,这很重要,因为如果某个字符串中包含特殊字符且没有被转换,那么无法在客户端显示出来, 这就有可能会被js脚本攻击。

      default可以设置一个默认值,如果value值为null,则返回默认值,如果默认值也为null,则返回一个空字符串

  2. set标签

    (1) 总共有四种格式,其中一二种类似,三四种类似,故以下介绍第一种和第三种:

      <c:set  var="varName" value="value" [scope="{page|request|session|application}"] />

      value里可以是字符,也可以是EL表达式的值,scope为限域变量的作用范围。作用是创建一个名为varName的限域变量。

      <c:set target="target" property="propertyName" value="value" />

      target为要赋新值的限域对象,必须是JavaBean实例,property是target实例的属性,value是赋给具体的属性值。作用是设置已存在的限域对象的属性值。

  3. remove标签

    (1) 格式:<c:remove var="varName" [scope="{page|request|session|application}"] />

      var值为要删除在范围scope的变量。

  4. if 标签

    (1) 格式:<c:if test="testCondition" [var="varName" scope="{page|request|session|application}"] />

      test值要返回布尔值,故testCondition里可以是带有关系和empty运算符的EL表达式。var和scope要配合使用,var引用测试条件值的限域变量名称,类型为Boolean,利用scope属性来指定其作用范围。

  5. choose、when、otherwise标签

    相当于Java中的if...else if...else...以下用一个例子说明:

    

1 <c:set var="score" value="${param.score }"/>  
2 <c:choose>  
3     <c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>  
4     <c:when test="${score >= 90 }">A级</c:when>  
5     <c:when test="${score >= 80 }">B级</c:when>  
6     <c:when test="${score >= 70 }">C级</c:when>  
7     <c:when test="${score >= 60 }">D级</c:when>  
8     <c:otherwise>E级</c:otherwise>  
9 </c:choose>  

  6. forEach标签

    forEach标签是迭代动作指令,在JSP中十分常用。

    (1) 遍历变量

1 <c:set var="sum" value="0" />  
2 <c:forEach var="i" begin="1" end="10" step ="2">  
3     <c:set var="sum" value="${sum + i}" />  
4 </c:forEach>  
5 <c:out value="sum = ${sum }"/> 

    (2) 遍历数组:

1 <%  
2   String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};  
3   pageContext.setAttribute("ns", names);  
4 %>  
5 <c:forEach var="item" items="${ns}">  
6     <c:out value="name: ${item}"/><br/>  
7 </c:forEach> 

    (3) 遍历集合

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

   (4) 遍历Map

1 <%  
2     Map<String,String> stu = new HashMap<String,String>();  
3     stu.put("number", "N_1001");  
4     stu.put("name", "zhangSan");  
5     pageContext.setAttribute("stu", stu);  
6 %>  
7 <c:forEach var="item" items="${stu }">  
8     <c:out value="${item.key }: ${item.value }"/><br/>  
9 </c:forEach>  

  (5) varStatus属性

    这个属性是保存迭代状态的限域变量名称,可以获取循环状态,例如可以根据当前所在的行数来输出分隔符,最后一行不输出分隔符等等等。

    count:int类型,当前以遍历元素的个数;

    index:int类型,当前元素的下标;first:boolean类型,是否为第一个元素;

    last:boolean类型,是否为最后一个元素;

    current:Object类型,表示当前项目。

五、fmt类库

  以下介绍常用的格式化时间和格式化数字的一般用法。

  1. 格式化时间

1 <%  
2     pageContext.setAttribute("date", new Date());  
3 %>  
4 <fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/>  

  2. 格式化数字

1 <%  
2     double num = 4.1;   
3     pageContext.setAttribute("num", num);  
4 %>  
5 <fmt:formatNumber value="${num }" pattern="0.00"/><br/>  
6 <fmt:formatNumber value="${num }" pattern="#.##"/>  

    

猜你喜欢

转载自www.cnblogs.com/chenloveslife/p/8955829.html
今日推荐