JSTL

作者: 马佳乐 | 来源:发表于2022-04-28 17:25 被阅读0次

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"%>

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

下载jar包:
官网
: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("num", 10);
    %>
    <c:if test="${num>0 }">
        数值大于0
    </c:if>
    <br>
    <c:if test="${num>100 }" var="flag" scope="request"></c:if>
    ${flag }<br>
    ${requestScope.flag }<br>

choose、when和otherwise标签

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

语法格式:

    <c:choose>
        <c:when test="">
            ...
        </c:when>
        <c:when test="">
            ...
        </c:when>
        ...
        <c:otherwise>
            ...
        </c:otherwise>
    </c:choose>

属性:

  1. choose标签没有属性
  2. when标签只有一个test属性,必须属性
  3. otherwise标签没有联性

注意:

  1. choose标签至少包含一个when标签,可以没有otherwise标签
  2. otherwise标签必须设置在最后一个when标签后
  3. choose标签里不能直接嵌套其他标签,when标签和otherwise标签里可以嵌套其他标签
    <%
        request.setAttribute("score", 90);
    %>
    <c:choose>
        <c:when test="${score<60 }">
            <h2>不及格</h2>
        </c:when>
        <c:when test="${score>=60 && score<80 }">
            <h2>中等</h2>
        </c:when>
        <c:otherwise>
            优秀
        </c:otherwise>
    </c:choose>

迭代标签

forEach标签

用于循环遍历数组、List、Set、Map集合。在实际应用中使用非常频繁。

语法格式:

<c:forEach items="" var="">
    ...
</c:forEach>

items属性指定需要迭代的集合或数组
var属性制定迭代的当前元素

还可以设置开始索引,结束索引以及步长

<c:forEach items="${names }" var="name" begin="1" end="4" step="2">
    ${name } <br>
</c:forEach>
    <%
        List<String> names= new ArrayList<>();
        names.add("zhangsan1");
        names.add("zhangsan2");
        names.add("zhangsan3");
        names.add("zhangsan4");
        names.add("zhangsan5");
        names.add("zhangsan6");
        
        pageContext.setAttribute("names", names);
    %>
    <c:forEach items="${names }" var="name" begin="1" end="4" step="2">
        ${name } <br>
    </c:forEach>

更常用是在表格里使用,通过varStatus属性可以设置当前对象的一些信息

<%@page import="com.jstl.bean.Student"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.odd {
    background-color: #aaa;
}

.even {
    background-color: #eee;
}

/* table tr:nth-child(even) {
    background-color: #aaa;
} */
</style>
</head>
<body>
    <%
    List<Student> students = new ArrayList<>();
    students.add(new Student("zhangsan1", 11));
    students.add(new Student("zhangsan2", 12));
    students.add(new Student("zhangsan3", 13));

    pageContext.setAttribute("students", students);
    %>
    <table border="1">
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>

        <c:forEach items="${students }" var="student" varStatus="vs">
            <tr class="${vs.count % 2 == 0 ? 'even' : 'odd' }">
                <td>${vs.count }</td>
                <%-- <td>${vs.index }</td> 从0开始--%>
                <%-- <td>${vs.first }</td> true/false--%>
                <%-- <td>${vs.last }</td> true/false--%>
                <td>${student.name }</td>
                <td>${student.age }</td>
            </tr>

        </c:forEach>

    </table>
</body>
</html>

相关文章

  • JavaWeb之 JSTL

    JSTL jstl的概述 是apache的东西,依赖EL 使用jstl需要导入jstl1.2.jar【JSTL 1...

  • JavaWeb(第十二周)

    day13 一、JSTL标签库 1.什么是JSTL Apache的东西,依赖EL 使用JSTL需要导入jstl1....

  • 【JavaWeb】JSTL标签库

    JSTL标签库 JSTL标准标签库;JSTL用于简化JSP开发,提高代码的可读性与可维护性;JSTL由SUN(Or...

  • jstl标签库

    一、jstl标签库 jstl是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。js...

  • NO.6 JSTL

    1、什么是JSTL JSTL(JavaServerPages Standard Tag Library)JSP标准...

  • Web 基础17 JSP之JSTL入门

    1.1 JSTL简介   JSTL(JavaServer Pages Standard Tag Library,J...

  • 2018-10-06

    JSTL概念 JSTL(JavaServer Pages Standard Tag Library,JSP标准标签...

  • 2018-10-06

    JSTL概念 JSTL(JavaServer Pages Standard Tag Library,JSP标准标签...

  • 【Java】【JSTL】标准包

    JSTL (JavaServerPages Standard Tag Library)JSP标准标签库 JSTL的...

  • JAVA Web学习(18)___第12章JSTL标签

    第12章JSTL标签 12.1 JSTL标签库简介 根据JSTL标签所提供的功能,可以将其分为5个类别。 核心标签...

网友评论

    本文标题:JSTL

    本文链接:https://www.haomeiwen.com/subject/hvisyrtx.html