EL表达式

目录

一、EL表达式简介

EL(Expression Language)表达式语言。
作用:替换和简化JSP页面中Java代码的编写

二、基本语法

${表达式}

三、JSP对EL表达式的支持

JSP默认是支持EL表达式。
忽略EL表达式的两种方式
方式一:忽略当前jsp页面所有表达式:设置page指令中的属性isELIgnored=true

<%@ page isELIgnored="true" %>

方式二:忽略某个EL表达式,EL表达式前添加反斜杠\:${表达式}

页面输出结果是 false
\${3>5} 

四、运算

类型定义
算数运算符加(+)、减(-)、乘(*)、除(/或者div)、取余(%或者mod)
关系运算符>、<、>=、<=、==或eq、!= 【返回值就是true、false】
逻辑运算符&&或and、||或or、!或者not
空运算符empty 【判断字符串、集合、数组对象是否为null或者长度是否为0】
非空运算符not empty 【判断字符串、集合、数组对象不为null并且长度不为0】
三目运算符A ? B : C

其中,
empty:

示例代码:

<body>

    ${3>4}
    \${3>5}

<hr>

    <h3>算数运算符演示</h3>
    ${4 + 5}<br>
    ${3 - 1}<br>
    ${3 * 5}<br>
    ${5 / 3}<br>
    ${5 div 3}<br>
    ${5 % 3}<br>
    ${5 mod 3}<br>


    <h3>关系运算符演示</h3>
    ${3 == 5}
    ${3 eq 5}


    <h3>逻辑运算符演示</h3>
    ${5 > 3 && 5 > 4}


    <h3>三目运算符演示</h3>
    ${5 > 3 ? "Tank" : "Alex"}

    ${5 > 3 ? "Tank" : "Alex"}


    <h3>empty算符演示</h3>
    <%
        request.setAttribute("key", "abc");
        request.setAttribute("key1", "");
    %>
    <%--判断 域中的key对应的键是否为空或者长度是否为0--%>
    ${empty key}<br>
    ${empty requestScope.key}<br>
    <%--判断 域中的key1对应的键是否为空或者长度是否为0--%>
    ${empty key1}<br>

    <%--判断是否不为bull并且长度不为0--%>
    ${not empty key}
</body>

五、获取值

首先,EL表达式只能从域对象中获取值!

有两种书写方式:

${域名.键名}
${键名}

从指定域中获取指定键的值。如果${域名.键名}获取值为空,页面不会展示null,不展示任何异常字符。
若域名省略,表示从依次从最小的域中查找是否有该键对应的值,如果中途找到就直接回传,不再继续找下去;但是如果全部的范围都没有找到时,就回传""

此处可以发现EL表达式一个优点:不会在页面中输出null。

下面我们重点讲解,如何获取域中存储的值为字符串、对象、List集合、Map集合。

1.获取域中存储的值——字符串
<body>
    <%
        // 在域中存储数据
        request.setAttribute("name", "Tank");
        session.setAttribute("age", "30");
    %>

    <%--方式一--%>
    ${requestScope.name}<br>
    ${sessionScope.age}<br>
	
	<%--方式二--%>
    ${name}<br>
    ${age}<br>
</body>
5.2 获取域中存储的值——对象值

重点掌握,获取值为List集合、Map的方式,均会使用到。

第一步,定一个User.java

public class User {
    private String name;
    private Integer age;
    private Date birthday;


    // ==> 被EL表达式调用,属性 birStr
    /**
     * @description: 逻辑视图
     * 这个get方法,并没有对应User类中的某个成员变量,只是为了页面展示一个好看的格式。这种操作以后常用
     */
    public String getBirStr() {
        if (birthday != null) {
            // 1. 格式化日期
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            // 2. 返回字符串
            return sdf.format(birthday);
        }
        return "";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

第二步
获取代码:

<body>
    <%
        // 存储自定义对象
        User user = new User();
        user.setAge(21);
        user.setName("Tank");
        user.setBirthday(new Date());

        request.setAttribute("user", user);
    %>

    <h3>EL获取对象中的值</h3>
    ${requestScope.user}<br>

    <%--
        通过的是对象的属性来获取:${域对象..属性}
            * 属性:setter或getter方法,去掉set或get,将剩余部分,首字母变小写 ==> 属性
            * 比如:setName(String name) ==> 属性为 name
    --%>
    ${requestScope.user.name}<br>
    ${user.age}<br>
    ${user.birthday}<br>
    <%--${user.birthday.year}<br>--%>
    <%--获取自定义的时间返回值--%>
    ${user.birStr}
</body>

获取对象的语法:

${域对象..属性}

自定义对象中的字符串的获取没什么可说的。
birthday属性是Date类型,我们如何按照我们想要的时间格式获取值呢?
这里我们不得不说一个概念:逻辑视图。
逻辑视图:给User类添加一个public String getBirStr(){}方法,其对应的属性是birStr,在方法体中将处理后的结果返回即可。这样我们就可以在EL表达式中获取到我们处理后的结果了。上述操作,我们会经常用到!

${user.birStr}
5.3 获取域中存储的值——List集合

语法:

语法:${域名.键名[索引]}

值得一说的是,EL内部做了内部优化,获取值时,如果角标越界,不会抛出异常。

下面我们来演示List集合中存储字符串、对象,如何获取:

<body>
    <%
        User user = new User();
        user.setAge(21);
        user.setName("Tank");
        user.setBirthday(new Date());

        List list = new ArrayList();
        list.add("9");
        list.add("6");
        list.add(user);
        request.setAttribute("list", list);
    %>

    <%--EL获取域中存储的值_List集合--%>

    <%--List集合中存储字符串--%>
    ${requestScope.list[0]}<br>
    ${list[1]}<br>
    <%--EL内部做了内部优化,如果角标越界,不会抛出异常。--%>
    ${list[100]}<br>

    <%--List集合中存储了对象--%>
    ${list[2].name}<br>
    ${list[2].age}
</body>
5.4 获取域中存储的值——Map集合
语法,有两种书写方式: ```java ${域名.键名.key名称} ${域名.键名["key名称"]} ``` 注意,第二种方式key值必须使用双引号引起来。

下面我们在jsp文件中,演示Map集合中存储字符串、对象,如何获取:

<body>
    <%
        User user = new User();
        user.setAge(21);
        user.setName("Tank");
        user.setBirthday(new Date());

        Map map = new HashMap();
        map.put("name", "Tank");
        map.put("gender", "男");
        map.put("user", user);
        
        request.setAttribute("map", map);
    %>

    <%--EL获取域中存储的值_Map集合--%>
    <%--语法一--%>
    ${map.gender}<br>
    ${map.name}<br>
    ${map.user.name}<br>
    <%--获取日期类或自定义类,均可以使用逻辑视图--%>
    ${map.user.birStr}

    <hr>

    <%--语法二--%>
    ${map["gender"]}<br>
    ${map["name"]}<br>
    ${map["user"].name}<br>
    ${map["user"].birStr}<br>

</body>

参考:EL表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值