EL表达式和JSTL表达式(详解)

news/2024/11/8 18:18:36 标签: windows, 前端

1.EL表达式:

导包:

isELIgnored="false"就可以用了,这个包是用的tomcat内置的,如果不行的话,就需要导包

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
El表达式默认对JavaBean对象的getter方法进行调用

在 JSP 中,可以使用 EL 表达式获取 User 对象的 name 属性值:

${user.name} 实际上会调用 user 对象的 getName() 方法,获取 name 属性的值。

${user.name}
当出现多个作用域key相同时:

会由小到大的范围进行找

页面作用域: ${pageScope.xx}
请求作用域: ${requestScope.xx}
会话作用域: ${sessionScope.xx}
程序作用域: ${applicationScope.xx}

EL表达式的运算:

empty运算:

在 EL 表达式中,empty 运算符用于检查一个值是否为空或为 null。它可以用于各种类型的值,包括字符串、集合、数组和对象等。empty 运算符返回一个布尔值,如果值为空或为 null,则返回 true;否则返回 false。

<%-- 使用 empty 运算符检查各种类型的值 --%>
 
<p>Is name empty? ${empty person.name}</p>        <%-- 输出:false --%>
 
<p>Is age empty? ${empty person.age}</p>          <%-- 输出:false --%>
 
<p>Is hobbies empty? ${empty person.hobbies}</p>  <%-- 输出:true,因为 hobbies 属性尚未设置 --%>

中括号运算:

中括号运算用于访问集合(数组、List、Map等)类型的数据。

1.集合对象

${集合名.get[下标].属性名}

    <p>第一个人:${peopleList.get[0].name},年龄:${peopleList.get[0].age}</p>
    <p>第二个人:${peopleList.get[1].name},年龄:${peopleList.get[1].age}</p>
    <p>第三个人:${peopleList.get[2].name},年龄:${peopleList.get[2].age}</p>
2.数组,集合,Map

${名字[下标]}

${map[key]}

数组:
   <% String[] fruits = {"Apple", "Banana", "Orange"}; %>
   <p>First fruit: ${fruits[0]}</p>   <%-- 输出:First fruit: Apple --%>
   <p>Last fruit: ${fruits[2]}</p>    <%-- 输出:Last fruit: Orange --%>

list集合:
   <% List<String> colors = new ArrayList<String>(); %>
   <% colors.add("Red"); %>
   <% colors.add("Green"); %>
     
   <p>First color: ${colors[0]}</p>  <%-- 输出:First color: Red --%>
   <p>Last color: ${colors[2]}</p>   <%-- 输出:Last color: Blue --%>

Map集合: 
   <% Map<String, Integer> scores = new HashMap<String, Integer>(); %>
   <% scores.put("Alice", 85); %>
   <% scores.put("Bob", 92); %>
   <% scores.put("Charlie", 78); %>
 
   <p>Alice's score: ${scores["Alice"]}</p>  
                       <%-- 输出:Alice's score: 85 --%>

EL表达式运算符:

2.JSTL格式化标签:<fmt:formatDate>

参数:

使用指定的风格或模式格式化日期和时间

<fmt:formatDate value="${provider.creationDate}" pattern="yy-MM-dd hh:mm:ss" />
 

2.JSTL核心标签:

JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。

一共13个标签

1.表达式控制标签:out、set、remove、catch

2.流程控制标签:if、choose、when、otherwise

3.循环标签:forEach、forTokens

4.URL操作标签:import、url、redirect

使用标签时,要在前面加上

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

1. <c:out>

用来显示数据对象(字符串、表达式)的内容或结果

输出到页面

使用Java脚本的方式为:
<% out.println("hello") %>  <% =表达式 %>

使用JSTL标签:
<c:out value="字符串">,例如:

2. <c:set>

用于将变量存取于 JSP 范围中或 JavaBean 属性中

<c:set var="variableName" value="someValue" [scope="page|request|session|application"] />

设置简单值:
<c:set var="username" value="张三" scope="session" />
使用标签体设置值:message的值设为welcome
<c:set var="message" scope="request">
    welcom
</c:set>

设置属性值:给user的name属性赋值,相当于setName
<c:set target="${user}" property="name" value="李四" />

3.<c:remove>

主要用来从指定的 jsp 范围内移除指定的变量。

删除session作用域中的username变量
<c:remove var="username" scope="session" />

4.<c:catch>

用来处理 JSP 页面中产生的异常,并存储异常信息

如果抛异常,则异常信息保存在变量 name1 中。
<c:catch var="name1">

      容易产生异常的代码

</c:catch>

5.<c:if>

如果标签之间没有东西就会输出true或者false

<c:if test="条件1" var="name" [scope="page|request|session|application"]></c:remove>
输出布尔值
<c:if test="${person.name == '赵五'}" var="name2"></c:if>

满足条件则输出中间的内容
<c:if test="${user.age > 18}">
    您已成年!
</c:if>

满足条件并且赋值到变量isAdult
<c:if test="${user.age > 18}" var="isAdult" scope="request">
    <p>成年人的相关信息...</p>
</c:if>

<p>是否成年: ${isAdult}</p>

6. <c:choose> <c:when> <c:otherwise>

三个标签通常嵌套使用,第一个标签在最外层,最后一个标签在嵌套中只能使用一次

    <c:set var="score">85</c:set>
    <c:choose>
    <c:when test="${score>=90}">
    你的成绩为优秀!
    </c:when>
    <c:when test="${score>=70&&score<90}">
    您的成绩为良好!
    </c:when>
    <c:when test="${score>60&&score<70}">
    您的成绩为及格
    </c:when>
    <c:otherwise>
    对不起,您没有通过考试!
    </c:otherwise>
    </c:choose>

7.<c:forEach>

语法:

1. items 属性:必须属性,用于指定要遍历的集合或数组。可以是 List、Set、Map、数组等。

2. var 属性: 必须属性,用于指定一个变量名,该变量将在每次迭代中保存当前元素的值。

3. varStatus 属性:可选属性,用于指定一个变量名,该变量将保存当前迭代的状态信息,包括索引、计数等。状态信息是一个 javax.servlet.jsp.jstl.core.LoopTagStatus 对象。表示下标那种

4. begin 属性:可选属性,用于指定开始迭代的索引位置,默认为 0。

5. end 属性:可选属性,用于指定结束迭代的索引位置(包含)。

6. step 属性:可选属性,用于指定每次迭代的步长,默认为 1。

<c:forEach var="name" items="Collection" varStatus="statusName" 
                                 begin="begin" end="end" step="step"></c:forEach>

 <c:forEach var="provider" items="${requestScope.list}">
        <tr>
            <td>${provider.id}</td>
            <td>${provider.proCode}</td>
            <td>${provider.proName}</td>
            <td>${provider.proDesc}</td>
        </tr>
    </c:forEach>

8.<c:forTokens>

用于浏览字符串,并根据指定的字符串截取字符串
语法:

<c:forTokens items="stringOfTokens"
 delims="delimiters" [var="name" begin="begin" end="end" step="len" varStatus="statusName"]></c:forTokens>

JSTL函数:

1.fn:indexOf()

返回指定字符串在输入字符串中出现的位置

${fn:indexOf(<原始字符串>,<子字符串>)}

2.fn:join()

将数组中的元素合成一个字符串然后输出

${fn:join([数组], <分隔符>)}

3.fn:length()

返回字符串长度

${fn:length(string)}

4.fn:replace()

将输入字符串中指定的位置替换为指定的字符串然后返回

${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)}

5.fn:split()

将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回

${fn:split(<带分隔符的字符串>, <分隔符>)}

6.fn:substring()

返回字符串的子集

${fn:substring(<string>, <beginIndex>, <endIndex>)}

7.fn:trim()

移除首位的空白符

${fn:trim(<string>)}

http://www.niftyadmin.cn/n/5744273.html

相关文章

Java Iterator 实现杨辉三角

一、问题描述 杨辉三角定义如下&#xff1a; 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 4 6 4 1/ \ / \ / \ / \ / \ 1 5 10 10 5 1 把每一行看做一个list&#xff0c;试写一个 Iterator&#xff0c;不断输出下一行的 list&#xf…

中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通

随着数字化技术在各行各业的深入应用&#xff0c;交通管理领域也迈入了新的时代。OCR电子行驶证和电子驾驶证的推出&#xff0c;不仅提升了车辆及驾驶证件管理的效率&#xff0c;更大大方便了车主出行。电子证件的普及&#xff0c;使得交通管理从“实体化”逐渐走向“数字化”&…

【LeetCode】【算法】437. 路径总和

LeetCode 437. 路径总和 题目描述 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&a…

微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka

在 Windows 上安装 MySQL 下载 MySQL 安装包&#xff1a; 访问 MySQL 官方网站。选择适合 Windows 的安装程序&#xff0c;下载并保存。 运行安装程序&#xff1a; 双击下载的安装文件&#xff0c;开始安装。在安装向导中选择“开发者默认”或“完整安装”。 配置 MySQL&#x…

管理 Elasticsearch 变得更容易了,非常容易!

作者&#xff1a;来自 Elastic Ken Exner Elasticsearch 用户&#xff0c;我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂&#xff0c;面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天&#xff0c;我们宣布了自收购 Opster 以来的一…

【Linux】冯诺依曼体系、再谈操作系统

目录 一、冯诺依曼体系结构&#xff1a; 1、产生&#xff1a; 2、介绍&#xff1a; 二、再谈操作系统&#xff1a; 1、为什么要管理软硬件资源&#xff1a; 2、操作系统如何进行管理&#xff1a; 3、库函数&#xff1a; 4、学习操作系统的意义&#xff1a; 一、冯诺依曼…

每日一题——第一百二十一题

题目&#xff1a;找到一串字符串中最长的单词&#xff0c;打印单词&#xff0c;并打印其长度和开始的索引下标 #pragma once#include<stdio.h> #include<stdbool.h> #include<ctype.h> #include<string.h>//找到一串字符串中最长的单词&#xff0c;打…

今天想开发一个vue的组件传值知识点(目前还不知道想要写什么,暂时就是开发放在这里)

Vue组件传值&#xff08;一天一个小知识点&#xff09; 可能很多人都是觉得写这些文章是没有什么用的&#xff0c;有的人甚至觉得&#xff0c;写零碎的知识点没什么看头&#xff0c;但是就我实际的工作经验来说&#xff0c;我觉得&#xff0c;很多时候&#xff0c;写零碎的知识…