概述
EL的基本语法:
${表达式}
类似于JSP表达式<%=表达式%>。
可以通过page指令的isELIgnored属性来说明是否支持EL表达式。
<%@page isELIgnored="false" %>
当isELIgnored属性值为false时,表示可以使用EL表达式;当为true时,表示JSP页面不能使用EL表达式,默认为false。
基本语法
"[ ]"与“."运算符
EL使用”[ ]"和"."运算符来访问数据,主要使用EL获取对象的属性,包括获取JavaBean的属性值、数组中的元素及集合对象中的元素。
并且对于null值以空字符串显示而不是null,运算时不会发生错误和空指针异常,故在使用时不需要判断对象是否为null对象。
获取JavaBean的属性值
<%--user表示JavaBean对象,username表示实体类对象的属性,getUsername()表示获取JavaBean对象的username属性的值--%>
<%=user.getUsername()%>
<%--等价于--%>
${user.username}或${user["username"]}
获取数组中的元素
<%--如果controller或servlet或JSP中存在这么一段代码--%>
<%
String[] names={"张三","李四","王五"};
request.setAttribute("names",names);
%>
<%--那么就可以使用EL访问数组中的元素--%>
${names[0]},${names[1]},${names[2]}
获取集合对象中的元素
<%--如果controller或servlet或JSP中有这么一段话--%>
<%
ArrayList<User> users=new ArrayList<User>();
users.add(new User("张三"));
users.add(new User("李四"));
request.setAttribute("users",users);
%>
<%--可以用下面的代码访问集合中的元素,[0]表示第一个集合对象,username表示集合中实体对象的属性username--%>
${users[0].username},${users[1].username}
算术运算符
算术运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 加 | ${5+5} | 10 |
- | 减 | ${5-5} | 0 |
* | 乘 | ${5*5} | 25 |
/ | 除 | ${5/5} | 1 |
% | 求余 | ${5%5} | 0 |
关系运算符
关系运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
== | 等于 | ${5==5} | true |
!= | 不等于 | ${5!=5} | false |
< | 小于 | ${5<5} | false |
> | 大于 | ${5>5} | false |
<= | 小于等于 | ${5<=5} | true |
>= | 大于等于 | ${5>=5} | true |
逻辑运算符
逻辑运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
&& | 逻辑与 | 如果A为true,B为false,则A&&B | false |
|| | 逻辑或 | 如果A为true,B为false,则A||B | true |
! | 逻辑非 | 如果A为true,则!A | false |
empty运算符
empty运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
empty | 用于检测一个值是否为null | 如果A不存在,${empty A} | true |
条件运算符
条件运算符 | 说明 | 示例 | 结果 |
---|---|---|---|
? : | 对条件进行判断并执行相应操作 | ${A?B:C} | 如果A为true,则为B;如果A为false,则为C |
EL隐含对象
与作用范围有关的隐含对象
与作用范围有关的隐含对象有pageScope、requestScope、sessionScope和applicationScope,分别可以获取JSP隐含对象pageContext、request、session、application中的数据。
如果EL中没有使用隐含对象指定作用范围,则会依次从page、request、session、application范围查找,若找到则直接返回,如果没有找到则返回空字符串。
语法:
${EL隐含对象.关键字对象.属性}
或
${EL隐含对象.关键字对象}
示例:
<%--如果controller或servlet或JSP中有这么一段话--%>
<%
ArrayList<User> users=new ArrayList<User>();
users.add(new User("张三"));
users.add(new User("李四"));
request.setAttribute("users",users);
%>
<%--那么可以下面的EL代码进行调用值--%>
${requestScope.users[0].username},${requestScope.users[1].username}
与请求参数相关的隐含对象
与请求参数相关的隐含对象有param和paramValues。
语法如下:
${EL隐含对象.参数名}
示例:
<%--如果JSP页面有这么一段代码--%>
<form action="/login" method="post">
姓名:<input type="text" name="username"><br>
性别:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女<br/>
<input type="submit" value="提交">
</form>
<%--那么可以使用下面的EL代码获取其中的参数值--%>
姓名:${param.username}
性别:${paramValues.sex[0]},${paramValues.sex[1]}
实例
实例采用的是springmvc框架处理请求。
InputController.java
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
@Controller
public class InputController {
@RequestMapping("/input")
public String input(HttpServletRequest request, Model model) {
String[] users = {"唐僧", "孙悟空", "猪八戒", "沙僧"};
// 使用request传递数据
request.setAttribute("users", users);
// 使用Model传递数据
request.setAttribute("users", users);
return "input";
}
}
input.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL实例</title>
</head>
<body>
接收Controller转发过来的request内置对象的数据:<br>
${requestScope.users[0]}<br>
${requestScope.users[1]}<br>
${requestScope.users[2]}<br>
${requestScope.users[3]}<br>
<hr>
接收Controller转发过来的Model对象的数据:<br>
${users[0]}<br>
${users[1]}<br>
${users[2]}<br>
${users[3]}<br>
</body>
</html>
运行程序效果如下:
输入地址:http://localhost:8080/input