JSTL-13

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-13_第1张图片
image.png

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

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

JSTL-13_第2张图片
image.png

该情况下: var 指定的限域变量由同一个 JSP 页面中后面的标签测试所决定。

有主体内容

JSTL-13_第3张图片
image.png

主体内容为 JSP,若测试条件为 true,则处理 JSP。
JSTL 中没有 else 标签, 为了模拟 else 的情景,需要使用两个 if 标签,并
且这两个标签为相反的条件。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>




if标签




<%--    
    if标签
        格式:
            无主体内容:
            有主体内容:
                
                    主体内容
                
        常用属性:
            test:判断的条件,返回true或false,操作的是域对象的值;必须要设置的属性
            var:限域变量名,存在域对象中的变量名,可以通过el表达式获取到该变量名对应的值
            scope:限域变量名的域范围,四个范围 page|request|session|application
            
        注:if标签没有对应else,所以如果需要做else判断,需要设置两个完全相反的if条件判断
        
 --%>
 <%
    request.setAttribute("str", "a");
    request.setAttribute("str2", "a");
 %>
<%--   ${flag } 
${flag2 }
${flag3 }
${flag4 }
${flag5 }
--%> ${flag6 }




<% request.setAttribute("num", 80); %>

哎哟不错哦!

你很棒棒哦!


<% // 获取域对象中的值 Integer num = (Integer) request.getAttribute("num"); // 条件判断 if (num < 60) { %>

你个渣渣!不及格!

<% } else if (num == 60) { %>

分不在高,及格就行!

<% } %>

2) choose、 when 和 otherwise 标签
choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似。也
就是说:他们为相互排斥的条件式执行提供相关内容。 choose
标签内容部必须嵌有一个或多个 when 标签, 每个 when
标签代表可以进行运算和处理的一种情况。 otherwise 标签用于默认的条件代码
块,如果所有的 when 标签的测试条件运算结果都不为
true,就会执行该代码块。 如果有 otherwise 标签,它必须放在最后一个 when
标签之后,否则会报错。
chooseotherwise 标签没有属性, when 标签则必须使用 test
属性设定
一个条件,用于确定是否处理主体内容。

注意:

1、choose标签中只能包含when和otherwise标签,而when和otherwise标签中可以嵌套其他标签

报错:Illegal child tag in "c:choose" tag

2、choose和otherwise标签没有属性,而when标签必须设置test属性

3、choose标签中至少有一个when标签,可以没有otherwise标签

4、when标签必须设置在otherwise标签之前

5、otherwise标签只有在所有的when标签都不成立的条件下,才会执行

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>




choose


<%-- 
    choose、when和otherwise标签
        格式:
            
                
                    满足条件会执行的内容
                
                
                    满足条件会执行的内容
                
                ...
                
                    当所有的when条件不成立时,才会执行的内容
                
        
        注意:
            1、choose标签中只能包含when和otherwise标签,而when和otherwise标签中可以嵌套其他标签
                报错:Illegal child tag in "c:choose" tag
            2、choose和otherwise标签没有属性,而when标签必须设置test属性
            3、choose标签中至少有一个when标签,可以没有otherwise标签
            4、when标签必须设置在otherwise标签之前
            5、otherwise标签只有在所有的when标签都不成立的条件下,才会执行
 --%>
<%
    request.setAttribute("num", 80);
%>


    
        

不及格!

运气不错!

哎哟不错哦!

你很棒棒哦!

2. 迭代标签

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

JSTL-13_第4张图片
image.png
JSTL-13_第5张图片
image.png

格式:

1、遍历内容多次,相当于java中 for(int i = 0; i < length; i++) {}

step="间隔数">

${限域变量名}

2、迭代集合,相当于java中的 for(String str : strings) {}

varStatus="当前成员的相关信息">

${限域变量名}

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="com.shsxt.model.User"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>




forEach标签



<%--    
    forEach标签
        格式:
            1、遍历内容多次,相当于java中   for(int i = 0; i < length; i++) {}
                
                    ${限域变量名}
                
            2、迭代集合,相当于java中的   for(String str : strings) {}
                 
                    ${限域变量名}
                
                
                
 --%>
 
 <%
    List list = new ArrayList();
    for (int i = 0; i < 10; i++) {
        list.add("A:" + i);
    }
    request.setAttribute("mylist", list);
    
    List userList = new ArrayList<>();
    User user = new User();
    user.setUserId(1);
    user.setUserName("zhangsan");
    user.setUserPwd("123455");
    User user2 = new User();
    user2.setUserId(2);
    user2.setUserName("lisi");
    user2.setUserPwd("123123");
    User user3 = new User();
    user3.setUserId(3);
    user3.setUserName("wangwu");
    user3.setUserPwd("34667");
    userList.add(user);
    userList.add(user2);
    userList.add(user3);
    request.setAttribute("userList", userList);
    
    for(User u : userList) {
        
    }
    
    
    Map map = new HashMap();
    map.put("map1", "shsxt");
    map.put("map2", "bjsxt");
    map.put("map3", "sxt");
    map.put("map4", 12);
    request.setAttribute("map", map);
 
 %>
 

迭代集合

${item }
${item } -- ${item.userId } -- ${item.userName } -- ${item.userPwd }

用户ID 用户姓名 用户密码 下标 第几次被循环到 是否属第一个被循环的 是否属最后一个被循环的
${item.userId } ${item.userName } ${item.userPwd } ${itemp.index } ${itemp.count } ${itemp.first } ${itemp.last }

迭代Map

键:${item.key } -- 值:${item.value }

循环内容多次

${j } * ${i } = ${j*i }

<% for(int i = 1; i < 10; i++ ) { %> <% for(int j = 1; j <= i; j++) { %> <% } %> <% } %>
<%=j %> * <%=i %> = <%=j*i %>

3. 格式化动作指令

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

格式:

无主体内容:

type="格式化的类型number|percent|currency" var="限域变量名" />

有主体内容:

var="限域变量名">

要被格式化的值

type属性的默认值是number

注:如果设置了var属性,格式化后的结果会被限域变量名所接收;若未设置var属性,则格式化的结果会直接显示。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>




formatNumber标签


<%-- 
    formatNumber标签
        格式:
            无主体内容:
                
            有主体内容:
                
                    要被格式化的值
                
        type属性的默认值是number     
        注:如果设置了var属性,格式化后的结果会被限域变量名所接收;若未设置var属性,则格式化的结果会直接显示。
 --%>
 <%
    request.setAttribute("num", "100");
 %>
  
${val }
${num }
${num } ${val2 }
${num }
${num }
${num }

2) formatDate 标签
使用指定的风格或模式格式化日期和时间,
标签有如下属性:

JSTL-13_第6张图片
image.png

pattern 属性指定更精确的处理日期:

JSTL-13_第7张图片
image.png
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>




formatDate标签


<%-- 
    formatDate标签
         
        
        常用属性:
            value:取值的是日期型
            type:格式的类型
                date日期格式 默认值
                time时间格式
                both日期+时间格式
            dateStyle:日期格式的具体格式 Long、short、Full等
            timeStyle:时间格式的具体格式Long、short、Full等
            pattern:具体的格式化格式  y M d H m s
        
        注:如果设置了var属性,格式化后的结果会被限域变量名所接收;若未设置var属性,则格式化的结果会直接显示。
--%>

<%
    request.setAttribute("myDate", new Date());
%>
${myDate } 

${date1 }






3) parseNumber 标签
利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成
指定语言环 境的数字。即解析一个代表着数字,货币或百分比的字符串。两种
语法形式:

JSTL-13_第8张图片
image.png

标签有如下属性


JSTL-13_第9张图片
image.png
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>




parseNumber标签


<%-- 
    parseNumber标签
        利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环 境的数字。即解析一个代表着数字,货币或百分比的字符串。
        
            要格式化的指定格式的字符串
        
 --%>
 
 <%
    request.setAttribute("num", "10");
    request.setAttribute("num2", "10%");
    request.setAttribute("num3", "¥10.00");
 %>
 
    ${num }
 
 
${num2 }
${num3 }

4) parseDate 标签
此标签为指定区域解析日期和时间的字符串表示法。即解析一个代表着日期
或时间的字符串。两种形式:

JSTL-13_第10张图片
image.png

标签有如下属性


JSTL-13_第11张图片
image.png
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>




parseDate标签


<%--    
    parseDate标签
        
 --%>
 
 
 <%
    request.setAttribute("date1", "2018-05-05 12:45:54");
    request.setAttribute("date2", "12:45:54");
    
    request.setAttribute("date3", "03/12-2019");
 %>
 
 
    ${date1 }
 
 
${date2 }
${date1 }

${date3 }

你可能感兴趣的:(JSTL-13)