博客目录
- 一、EL表达式介绍
- 二、EL获取数据
- 三、EL中的内置对象
- 四、EL访问Bean的属性
- 五、EL访问数组中的数据
- 六、EL获取list中数据
- 七、EL访问Map
- 八、EL中的运算符(empty)
- 九、自定义EL函数
- 十、总结
接着上一篇博文 从四开始
四、EL访问Bean的属性
4.1 java Bean是什么?
JavaBean是公共Java类,但是为了编辑工具识别,需要满足至少三个条件
- 有一个public默认构造器(例如无参构造器)
- 属性使用public 的get,set方法访问,也就是说设置成private同时get,set方法与属性名的大小也需要对应。例如属性name,get方法就要写成,public String getName(){},N大写。
- 需要序列化。这个是框架,工具跨平台反映状态必须的
4.2、EL访问Bean属性
- EL可以通过${key.属性}的方式获取到指定值,其底层实际调用的是该对象的相应属性的get方法
package linjie.com;
/*
*Bean
*/
public class Demo {
private String name;
private int age;
public Demo(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return super.toString();
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="linjie.com.Demo"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Demo test=new Demo("linjie",12);
request.setAttribute("ELttt", test);
%>
name=${requestScope.ELttt.name }<br>
age=${requestScope.ELttt.age }<br>
<!-- 若访问为null的对象的属性,EL是不会抛出空指针异常的,只是不显示而已 -->
names=${requestScope.ELtttxx.name }<br>
</body>
</html>
五、EL访问数组中的数据
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String[] names={"xlj","lucy","king"};
pageContext.setAttribute("names", names);
%>
name[1]=${names[1] }<br>
<!-- 若访问的数组元素下标超出了数组下标上限,EL不会抛出越界异常,只是不显示 -->
names[5]=${names[5] }<br>
</body>
</html>
package linjie.com;
/*
*Bean
*/
public class Stu {
private String sname;
private String address;
public Stu() {
super();
}
public Stu(String sname, String address) {
super();
this.sname = sname;
this.address = address;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return super.toString();
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="linjie.com.*"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Stu[] stus=new Stu[3];
stus[0]=new Stu("xlj","A");
stus[1]=new Stu("lucy","B");
stus[2]=new Stu("kingA","C");
pageContext.setAttribute("stus",stus);
%>
stus[1].Sname=${stus[1].sname }
</body>
</html>
六、EL获取list中数据
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
List<String> names=new ArrayList<String>();
names.add("xlj");
names.add("lucy");
pageContext.setAttribute("names", names);
%>
<!-- 因为List底层是数组,所以可以这样写 -->
names[1]=${names[1] }<br>
</body>
</html>
注意:
EL可以通过索引访问List,但无法访问Set。因为Set中没有索引概念
七、EL访问Map
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Map<String,Object> map=new HashMap<String,Object>();
map.put("age", 20);
map.put("name", "xlj");
pageContext.setAttribute("map", map);
%>
name=${map.name }<br>
age=${map.age }<br>
</body>
</html>
八、EL中的运算符(empty)
1、先说说几个常用运算符
- 算术运算符:+、-、*、/、%(不支持++、–)
- 关系运算符:==、!=、>、>=、<、<=
- 逻辑运算符:!、&&、||、not、and、or
- 条件运算符:?:
- 取值运算符:[]、点号
2、empty运算符
- 用法为${empty 变量},结果为布尔值
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name1=null;
String name2="";
List<String> name3=new ArrayList<String>();
pageContext.setAttribute("name1", name1);
pageContext.setAttribute("name2", name2);
pageContext.setAttribute("name3", name3);
%>
empty对于没有定义的变量,运算结果为true:
empty namex=${empty namex }<br>
empty对于null的引用,运算结果为true:
empty name1=${empty name1 }<br>
empty对于为空串的String引用,运算结果为true:
empty name2=${empty name2 }<br>
empty对于没有元素的数组或集合,运算结果为true:
empty name3=${empty name3 }<br>
</body>
</html>
九、自定义EL函数
具体可以看引用的博文 讲述 ,我现在还没有用到自定义EL函数 ,所以暂时不写这里, 等用的时候写在这里, 会更加有印象
十、EL总结
- EL表达式不能出现在Java代码块、表达式块等JSP动态代码部分
- EL只能从四大域属性空间中获取数据(pageContext、request、session、application)
- EL不会抛出空指针异常,只会不显示
- EL不会抛出数组越界异常,只会不显示
- EL不具有对字符串进行处理的能力(可以使用JSTL的EL或者自定义EL函数)