JSTL标签

Posted Vodka~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSTL标签相关的知识,希望对你有一定的参考价值。

1.Java Server Pages Standards Tag Library : JSP标准标签库,是一个定制标签类库的集合,用于解决一些常见的问题:迭代一个映射或集合,条件测试,XML处理,数据库的访问和操作等。

2.-核心标签库: http://java.sun.com/jsp/jstl/core , 包含web应用的常见工作,比如:循环,表达式赋值,基本输入输出等。
-格式化标签库: http://java.sun.com/jsp/jstl/fmt , 用来格式化显示数据的工作,比如: 对不同区域的日期格式化等。
-为了在jsp页面使用jstl类库,必须以下列格式使用taglib指令:
<%@taglib uri="" prefix="" %> //prefix前缀可以是任何内容,uri则填库的链接
-要使用这两个库,需要导入两个jar包,从Apache的标准标签库中下载二进制包(jakarta-taglibs-standard-current.zip),将二进制jar包解压后,再将standard.jar 和 jstl.jar 导入项目目录下。

3.条件动作标签:
-在JSTL中有4个标签可以执行条件式动作指令:if, choose,when,otherwise.
-if标签先对test="xxx"的条件进行测试,如果条件运算结果为true,则处理该if的主体内容,测试结果保存在一个Boolean对象中,并创建一个
限域变量来引用Boolean对象。可以利用var属性设置限域变量名,scope属性指定其作用范围。

<v:if test="<boolean>" var="<string>" scope="<string>">
     ....
</v:if>
//if标签有如下属性:
   1.test: 条件,必须要有,默认值:无
   2.var : 用于存储条件判断结果结果的变量(限域变量名) ,非必要,默认值:无
   3.scope:var 属性的作用域,可取值:page| request | session | application ,非必要, 默认值:  page    

//1.choose和when标签的作用与java中的switch和case关键字相似,用于在众多选项中作出选择,otherwise相当于default
//2.choose标签没有属性,when标签必须且只有一个test属性,otherwise标签没有属性
// 3.可以没有otherwise标签,但每一个choose至少包含一个when标签,otherwise标签必须在最后
//4.choose标签里面只能嵌套when标签和otherwise标签,但otherwise标签和when标签能嵌套类似于if标签的其他标签
<v:choose>
     <v:when test="${score < 60}">
         <h1>有点差哦<h1>
     </v:when>
     <v:when test="${score < 80}">
         <h1>还不错哦<h1>
     </v:when>
     <v:when test="${score > 80}">
         <h1>很棒棒哦<h1>
     </v:when>
         ......
         ......
      <v:otherwise>
         ...
      <v:otherwise>      
</v:choose>

4.迭代标签:
forEach是将一个主题内容或者一个对象集合迭代多次,可以迭代的对象包括所有的java.util.Collection和java.util.Map接口的实现,以及对象或者基本类型的数组。还可以迭代java.util.Iterator和java.util.Enumeration,但不能再多个动作指令中使用Iterator 或者 Enumeration ,因为他们不能重置。

//语法格式:

 <v:forEach>
       items="<Objet>"  
       begin="<int>"
       end="<int>"
       step="<int>"
       var="<string>"
       varStatus="<string>" 
 </v:forEach>
 //属性描述:
    1.items:  要被循环的数据, 非必要,无默认值
    2.begin:  开始的元素(0=第一个元素, 1=第二个元素), 非必要, 默认值为: 0
    3.end:  最后一个元素,非必要,默认值: Last element
    4.step:  每一次迭代的步长  ,非必要, 默认值:1
    5.var:   代表当前条目的变量名称,非必要, 无默认值
    6.varStatus:  代表循环状态的变量名称,非必要,无默认值 
          -forEach varStatus属性:
                   1.index:当前这次迭代从0开始的迭代索引
                   2.count:当前这次迭代从1开始的迭代计数
                   3.first:用来表明当前这轮迭代是否为第一次迭代的标志
                   4.last: 用来表明当前这轮迭代是否为最后一次迭代的标志

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入所需要的标签库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="v"%>
<html>
<head>
    <title>JSTL的使用</title>
</head>
<body>
<%--     设置数据--%>
<%
   request.setAttribute("Age",300);

    List<String> UserList = new ArrayList<>();
    UserList.add("Shenzhen");
    UserList.add("Chengdu");
    UserList.add("Luoyang");
    UserList.add("Guangzhou");
    UserList.add("Xian");
    request.setAttribute("UserList",UserList);
%>

<%--迭代主体内容多次--%>
<v:forEach var="index" begin="1" end="10" step="3">
   ${index}:${Age+index}<br>
</v:forEach>
<h1>----------------------------</h1>
<%--循环,相当于java的forEach--%>
<v:forEach items="${UserList}" var="instance">
    ${instance} </br>
</v:forEach>

<%--
   利用循环创建varStatus表格
--%>
<table align="center"   width="800" border="1" sytle="border-collapse:collapse;">
    <tr>
        <th>Name</th>
        <th>Index</th>
        <th>Count</th>
        <th>First</th>
        <th>Last</th>
    </tr>
    <v:forEach var="index" items="${UserList}" varStatus="temp">
        <tr>
            <td>${index}</td>
            <td>${temp.index}</td>
            <td>${temp.count}</td>
            <td>${temp.first}</td>
            <td>${temp.last}</td>
        </tr>
    </v:forEach>
</table>
</body>
</html>





<%@ page import="com.StartSL.UserInfo" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="v" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>用户信息表</title>
</head>
<body>
<%--    设置用户信息表 --%>
<%
    List<UserInfo> Users = new ArrayList<>();
    UserInfo UOne = new UserInfo(1,"001","857857");
    UserInfo UTwo = new UserInfo(2,"002","666666");
    UserInfo UThree = new UserInfo(3,"003","7777");
    UserInfo UFour = new UserInfo(4,"004","9090");
    UserInfo UFive = new UserInfo(5,"005","3635");
    Users.add(UOne);
    Users.add(UTwo);
    Users.add(UThree);
    Users.add(UFour);
    Users.add(UFive);
//    添加到request作用域
    request.setAttribute("Users",Users);
%>
<%--设置用户表--%>
<v:if test="${!empty Users}">
     <table align="center" width="1000" border="1" style="border-collapse: collapse">
         <tr>
             <th>Num</th>
             <th>UserAccount</th>
             <th>UserPasswrod</th>
         </tr>
             <v:forEach var="index" begin="0" end="${Users.size()-1}" step="1">
               <tr>
                 <td>&nbsp;&nbsp;${Users[index].num}</td>
                 <td>&nbsp;&nbsp;${Users[index].account}</td>
                 <td>&nbsp;&nbsp;${Users[index].password}</td>
               </tr>
             </v:forEach>
         </v:if>
     </table>
</body>
</html>


5.格式化动作标签:
-jstl提供了数字,日期的格式化或解析的标签,formatNumber, formatDate,parseNumber,parseDate。
1.formatNumber 标签用于格式化数组,货币,百分比。该标签用指定的格式或精度来格式化数字。(将数值类型转换成指定格式的字符串类型)

//语法格式
  <fmt:formatNumber 
     value="<string>"
     type="<string>"
     var="<string>"
     scope="<string>"
  />
//属性
 value: 要显示的数字,必要,无默认值
 type:  NUMBER,CURRENCY,PERCENT,非必要,默认值:Number
 var: 存储格式化数字的变量, 非必要, 默认值:Print to page
 scope: var属性的作用域(page|request|session|application) ,非必要, 默认值:page

//注意:1. 如果设置了var属性,则格式化后的结果不会直接输出,需要通过el表达式获取var对应的限域变量名
        2.默认的类型(type) 的取值为number,可取值:number,percent,currency
        3.添加这两个标签库声明:
          <%@ taglib prefix="v" uri="http://java.sun.com/jsp/jstl/core" %>
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

2.formatDate标签:
用于使用不同的方式格式化日期。(将Date型数据类型转换成指定格式的字符串类型)

//语法格式
<fmt:formatDate
     value="<string>"
     type="<string>"
     dataStyle="<string>"
     timeStyle="<string>"
     pattern="<string>"
     timeZone="<string>"
     var="<string>"
     scope="<string>"
 />
 //属性:
    value:要显示的日期,必要值,无默认值
    type:Date,Time,Both,   非必要,默认值:date
    dateStyle: FULL,LONG,MEDIUM,SHORT,DEFAULT, 非必要,默认值:default
    timeStyle: FULL,LONG,MEDIUM,SHORT,DEFAULT, 非必要,默认值:default
    pattern: 自定义格式模式, 非必要,无默认值
    timeZone:  显示日期的时区, 非必要, 默认值:默认时区
<%--格式化日期--%>
<%
   java.util.Date MyDate = new java.util.Date();
   System.out.println(MyDate);
   request.setAttribute("MyDate",MyDate);
%>
${MyDate} <br>
<fmt:formatDate value="${MyDate}" /> <br>
<fmt:formatDate value="${MyDate}" type="time"/> <br>
<fmt:formatDate value="${MyDate}" type="date"/> <br>
<fmt:formatDate value="${MyDate}" type="both" dateStyle="FULL"/> <br>
<fmt:formatDate value="${MyDate}" type="both" timeStyle="short"/> <br>
<fmt:formatDate value="${MyDate}" pattern="yyyy-MM-dd"/> <br>

3.parseNumber标签:用来解析数字,百分数,货币,将这些特定类型字符串转换成数值型
4.parseDate标签: 同理,与formatDate功能相反

<fmt:parseNumber
   value="<string>"
   type="<string>"
   var="<string>"
   scope="<string>"
/>

以上是关于JSTL标签的主要内容,如果未能解决你的问题,请参考以下文章

JSTL

复习整理1:jsp标准标签库jstl

jsp之jstl核心标签库

JSTL标签库

什么是Taglib?

JSP常用标签——JSTL标签和EL表达式