好 本文我们还是继续说EL表达式
我们来讲一个非空判断的好手 empty
我们直接编写代码如下
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<%
request.setAttribute("str1","abc");
request.setAttribute("str2","");
request.setAttribute("str3",null);
%>
<p>${empty str1}</p>
<p>${empty str2}</p>
<p>${empty str3}</p>
</body>
</html>
这里 我们分别定义了 三个字符串值 str1是一个正常的字符串内容 str2 是个空字符 str3 直接是一个空对象null
然后我们对用EL输出了他们empty判断后的结果
我们运行项目
很明显 他都帮我们转换成 布尔值的类型了 第一个不为空 所以是 否
后面两个 一个空字符串 一个null 都成立 true 条件真
从这个结果 我们可以简单总结到 数据为空 返回 true 数据不为空 返回false
那么 除了字符串 我们还会有集合
先是 list 参考代码如下
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<%
List Iist1 = new ArrayList<>();
List Iist2 = new ArrayList<>();
Iist2.add("aaa");
request.setAttribute("Iist1",Iist1);
request.setAttribute("Iist2",Iist2);
%>
<p>${empty Iist1}</p>
<p>${empty Iist2}</p>
<p>${empty Iist3}</p>
</body>
</html>
这边 我们作用域中 定义了两个 list集合 第一个 Iist1 我们声明了 但是里面没有加数据
然后第二个 Iist2 我们声明之后加了一条数据进去
然后 这里 我们用 empty 判断他们 然后 还多加了一个list3的判断 这个是没有定义的 在域中是找不到的
然后 我们运行结果如下
首先 没有数据的 list list1 是一个 true
然后 第二条里面有一条数据的 list2 返回 false
然后第三个 不存在的域值 返回了true 也就知道了 域中找不到的值 也视为空
然后是我们的map
编写代码如下
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<%
Map map1 = new HashMap();
Map map2 = new HashMap();
map2.put("aaa","111");
request.setAttribute("map1",map1);
request.setAttribute("map2",map2);
%>
<p>${empty map1}</p>
<p>${empty map2}</p>
</body>
</html>
这里 我们定义了 map1 声明为一个map集合 然后就不操作了
然后定义了 map2 加入了一个 键 aaa 对应值为 111
运行代码
这里 还是 因为第一个map1内没有数据 是个true
而 后面的 map2 是有一条数据的 返回了 false
然后是我们的 java bean
这边我们可以这样写代码
<%@ page import="com.example.dom.attribute.users" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<%
users user1 = new users();
users user2 = new users();
user2.setId(1);
request.setAttribute("user1",user1);
request.setAttribute("user2",user2);
%>
<p>${empty user1}</p>
<p>${empty user2}</p>
</body>
</html>
这里 我们用上文中写的 users 的bean 声明了两个对象 user1 和 user2 然后 给user2的id赋了个值
然后 我们运行界面
有点出乎意料 因为成为了 双false 因为 你直接放对象上去的话 他会认为这是个对象 是有对象的
所以 他们都是非空
那么empty是判断 数据是不是为空的 我们判断非空 就可以这样写
<%@ page import="com.example.dom.attribute.users" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<%
request.setAttribute("str1","abc");
request.setAttribute("str2","");
request.setAttribute("str3",null);
%>
<p>${!empty str1}</p>
<p>${!empty str2}</p>
<p>${!empty str3}</p>
</body>
</html>
前面加一个感叹号的意思就是取反