jstl标签有哪些分类-乐字节前端

JSTL

标签的使用

​ Java Server Pages Standard Tag Libray(JSTL):JSP 标准标签库,是一个定制标签类库的集合,用于解决一些常见的问题,例如迭代一个映射或者集合、条件测试、XML 处理,甚至数据库和访问数据库操作等。

​ 我们现在只讨论 JSTL 中最重要的标签,迭代集合以及格式化数字和日期几个标签。

核心标签库

http://java.sun.com/jsp/jstl/core

​ 包含 Web 应用的常见工作,比如:循环、表达式赋值、基本输入输出等。

格式化标签库

http://java.sun.com/jsp/jstl/fmt

​ 用来格式化显示数据的工作,比如:对不同区域的日期格式化等。

​ 为了在 JSP 页面使用 JSTL 类库,必须以下列格式使用 taglib 指令:

<%@taglib uri="" prefix="" %>

​ 例如:

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

​ 前缀可以是任意内容,遵循规范可以使团队中由不同人员编写的代码更加相似;所以,建议使用事先设计好的前缀。

​ 此时需要导入两个jar 包

jstl_1.png

​ 从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。

​ 官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

​ 下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jarjstl.jar 文件拷贝到项目的指定目录下。

条件动作标签

​ 条件动作指令用于处理页面的输出结果依赖于某些输入值的情况,在 Java 中是利用 if、 if…else 和 switch 语句来进行处理的。在 JSTL 中也有 4 个标签可以执行条件式动作指令:if、 choose、when 和 otherwise。

if 标签

​ if 标签先对某个条件进行测试,如果该条件运算结果为 true, 则处理它的主体内容,测试结果保存在一个 Boolean 对象中,并创建一个限域变量来引用 Boolean 对象。可以利用 var 属性设置限域变量名,利用 scope 属性来指定其作用范围。

语法格式
<c:if test="<boolean>" var="<string>" scope="<string>">
   ...
</c:if>
属性

if 标签有如下属性:

属性 描述 是否必要 默认值
test 条件
var 用于存储条件结果的变量(限域变量名)
scope var属性的作用域<br />可取值:page|request|session|application page
示例
<%
    request.setAttribute("flag",true);
    request.setAttribute("num",1);
%>
<c:if test="${flag}">
   <p>结果为true<p>
</c:if>
<c:if test="${num > 0}">
   <p>num的值比0大<p>
</c:if>

注:<font color="red"> JSTL中没有else标签</font>,为了模拟 else 的情景,需要使用两个 if 标签,并且这两个标签为相反的条件。

choose、when 和 otherwise 标签

​ choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似,用于在众多选项中做出选择。也就是说:他们为相互排斥的条件式执行提供相关内容。

​ switch语句中有case,而choose标签中对应有when,switch语句中有default,而choose标签中有otherwise。

语法格式
<c:choose>
    <c:when test="<boolean>">
        ...
    </c:when>
    <c:when test="<boolean>">
        ...
    </c:when>
    ...
    ...
    <c:otherwise>
        ...
    </c:otherwise>
</c:choose>
属性
  • choose标签没有属性。
  • when标签只有一个test属性。
  • otherwise标签没有属性。
示例
<%
    request.setAttribute("score", 90);
%>
<c:choose>
    <c:when test="${score < 60 }">
        <h3>你个小渣渣!</h3>
    </c:when>
    <c:when test="${score >= 60 && score < 80 }">
        <h3>革命尚未成功,同志仍需努力!</h3>

    </c:when>
    <c:otherwise>
        <h3>你很棒棒哦!</h3>
    </c:otherwise>
</c:choose> 
注意点
  • choose标签和otherwise标签没有属性,而when标签必须设置test属性
  • choose标签中必须有至少一个when标签,可以没有otherwise标签
  • otherwise标签必须放在最后一个when标签之后
  • choose标签中只能有when标签和otherwise标签,when标签和otherwise标签可以嵌套其他标签
  • otherwise标签在所有的when标签不执行的情况下才会执行

迭代标签

​ forEach 是将一个主体内容迭代多次,或者迭代一个对象集合。可以迭代的对象包括所有的 java.util.Collection 和 java.util.Map 接口的实现,以及对象或者基本类型的数组。他还可 以迭代 java.util.Iterator 和 java.util.Enumeration,但不能在多个动作指令中使用 Iterator 或者 Enumeration,因为 Iterator 或者 Enumeration 都不能重置(reset)。 各属性含义如下:

forEach标签

语法格式
<c:forEach
    items="<object>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>"
    varStatus="<string>">
</c:forEach>    
属性
属性 描述 是否必要 默认值
items 要被循环的数据
begin 开始的元素(0=第一个元素,1=第二个元素) 0
end 最后一个元素(0=第一个元素,1=第二个元素) Last element
step 每一次迭代的步长 1
var 代表当前条目的变量名称
varStatus 代表循环状态的变量名称

forEach varStatus 属性

  • index: 当前这次迭代从 0 开始的迭代索引
  • count: 当前这次迭代从 1 开始的迭代计数
  • first: 用来表明当前这轮迭代是否为第一次迭代的标志
  • last: 用来表明当前这轮迭代是否为最后一次迭代的标志
示例

1.遍历主体内容多次

<c:forEach begin="开始数" end="结束数" step="迭代数" var="限域变量名">

</c:forEach>

相当于java的for循环:

for(int i = 0; i < 10; i++) {

}

如下:

<!-- 遍历主体内容多次  -->
<c:forEach begin="0" end="10" var="i" >
    标题${i }<br>
</c:forEach>

2.循环

<c:forEach items="被循环的集合" var="限域变量名" varStatus="当前成员对象的相关信息">

</c:forEach>

相当于java的foreach循环:

for(String str : list) {

}

如下:

 <%
    List<String> list = new ArrayList<String>();
    for (int i = 1; i <= 10; i++) {
        list.add("A:" + i);
    }
    pageContext.setAttribute("li", list);
%>

<!-- 循环集合 -->
<c:forEach items="${li }" var="item">
    ${item }
</c:forEach>
<hr>
<table align="center" width="800" border="1" style="border-collapse: collapse;">
    <tr>
        <th>名称</th>
        <th>当前成员下标</th>
        <th>当前成员循环数</th>
        <th>是否第一次被循环</th>
        <th>是否最后一次被循环</th>
    </tr>
    <c:forEach items="${li }" var="item" varStatus="itemp">
        <tr>
            <td>${item }</td>
            <td>${itemp.index }</td>
            <td>${itemp.count }</td>
            <td>${itemp.first }</td>
            <td>${itemp.last }</td>
        </tr>
    </c:forEach>
</table>

<!-- 循环对象集合 -->
<%
    List<User> userList = new ArrayList<User>();
    User user = new User(1,"zhangsan","123456");
    User user2 = new User(2,"lisi","123321");
    User user3 = new User(3,"wangwu","654321");
    userList.add(user);
    userList.add(user2);
    userList.add(user3);
    // 将数据设置到作用域中
    request.setAttribute("userList", userList);
%>
<c:if test="${!empty userList }">
    <table align="center" width="800" border="1" style="border-collapse: collapse;">
        <tr>
            <th>用户编号</th>
            <th>用户名称</th>
            <th>用户密码</th>
            <th>用户操作</th>
        </tr>
        <c:forEach items="${userList }" var="user">
            <tr align="center">
                <td>${user.userId }</td>
                <td>${user.uname }</td>
                <td>${user.upwd }</td>
                <td>
                    <button>修改</button> 
                    <button>删除</button>
                </td>
            </tr>
        </c:forEach>
    </table>
</c:if>

<!-- 遍历Map -->
<%
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("map1", "aaa");
    map.put("map2", "bbb");
    map.put("map3", "ccc");
    pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="mymap">
    键:${mymap.key }-值:${mymap.value } <br>
</c:forEach>

格式化动作标签

​ JSTL 提供了格式化和解析数字和日期的标签,我们讨论里面有:formatNumber、formatDate、parseNumber及parseDate。

formatNumber标签

​ formatNumber标签用于格式化数字,百分比,货币。该标签用指定的格式或精度来格式化数字。(将数值型数据转换成指定格式的字符串类型。)

语法格式
<fmt:formatNumber
  value="<string>"
  type="<string>"
  var="<string>"
  scope="<string>"/>
属性
属性 描述 是否必要 默认值
value 要显示的数字
type NUMBER,CURRENCY,或 PERCENT类型 Number
var 存储格式化数字的变量 Print to page
scope var属性的作用域 page

注意:

  1. 如果设置了var属性,则格式化后的结果不会输出,需要通过el表达式获取var对应的限域变量名
  2. 默认的类型(type)的取值为number。可取值:number数值型、percent百分比类型、currency货币型
示例
<fmt:formatNumber value="10" type="number" var="num" /> ${num } <br>
<fmt:formatNumber value="10" type="percent"  />  <br>
<fmt:formatNumber value="10" type="currency"  />  <br>
<!-- 设置时区  -->
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="10" type="currency"  />  <br>

formatDate标签

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

语法格式
<fmt:formatDate
  value="<string>"
  type="<string>"
  dateStyle="<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 显示日期的时区 默认时区
var 存储格式化日期的变量名 显示在页面
scope 存储格式化日志变量的范围 页面

标签格式模式

代码 描述 实例
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 2002
M 月份数字。一位数的月份没有前导零。 April & 04
d 月中的某一天。一位数的日期没有前导零。 20
h 12 小时制的小时。一位数的小时数没有前导零。 12
H 24 小时制的小时。一位数的小时数没有前导零。 0
m 分钟。一位数的分钟数没有前导零。 45
s 秒。一位数的秒数没有前导零。 52
示例
<%
    request.setAttribute("myDate", new Date());
%>

${myDate } <br/>
<fmt:formatDate value="${myDate }" /><br/>
<fmt:formatDate value="${myDate }" type="date"/><br/>
<fmt:formatDate value="${myDate }" type="time"/><br/>
<fmt:formatDate value="${myDate }" type="both"/><br/>
<fmt:formatDate value="${myDate }" type="both" dateStyle="full"/><br/>
<fmt:formatDate value="${myDate }" type="both" dateStyle="long"/><br/>
<fmt:formatDate value="${myDate }" type="both" dateStyle="short"/><br/>
<fmt:formatDate value="${myDate }" type="both" timeStyle="full"/><br/>
<fmt:formatDate value="${myDate }" type="both" timeStyle="long"/><br/>   
<fmt:formatDate value="${myDate }" pattern="HH:mm yyyy/MM/dd"/><br/>

parseNumber标签

​ parseNumber标签用来解析数字,百分数,货币。(parseNumber 标签可以将数字、货币或百分比类型的字符串转换成数值型。)

语法格式
<fmt:parseNumber
  value="<string>"
  type="<string>"
  var="<string>"
  scope="<string>"/>
属性
属性 描述 是否必要 默认值
value 要解析的数字 Body
type NUMBER,,CURRENCY,或 PERCENT number
var 存储待解析数字的变量 Print to page
scope var属性的作用域 page
示例
<fmt:parseNumber value="100"  /> <br>
<fmt:parseNumber value="100"  type="number" /> <br>
<fmt:parseNumber value="100%"  type="percent" /> <br>
<fmt:parseNumber value="¥10.00"  type="currency" /> <br>

parseDate标签

​ parseDate标签用于解析日期。(将指定格式的字符串转换成Date类型。)

语法格式
<fmt:parseDate
   value="<string>"
   type="<string>"
   dateStyle="<string>"
   timeStyle="<string>"
   pattern="<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 自定义格式模式
var 存储格式化日期的变量名 显示在页面
scope 存储格式化日志变量的范围 页面
示例
<fmt:parseDate value="2020-01-06" type="date" /> <br>
<fmt:parseDate value="2020/01/06" pattern="yyyy/MM/dd" /> <br>

猜你喜欢

转载自blog.51cto.com/14819669/2507085