EL表达式
1、EL概述和基本语法
要简化jsp中java代码开发。
它不是一种开发语言,是jsp中获取数据的一种规范
<body>
<%
Student stu = (Student) request.getAttribute("s");
out.print(stu.getName());
%>
${s.name}
</body>
2.EL的具体功能
a.获取数据
EL表达式只能获取四个作用域里面的数据
2.1 ${u} 原理: pageContext.findAttribute(“u”);
EL获取对于null这样的数据,在页面中表现为空字符串
2.2 ${u.name} == u.getName()方法
点(.) 运算符相当于调了getter方法,点后面跟的是属性名。
2.3 属性导航
思路:
${s.city.address}
s.city==>s.getCity() 即return city
s.city.address==>于是接着下来获取city.getAddress()
案例代码:
Student.java
package com.jsp.el;
public class Student {
private String name ;
private int age ;
//必须要new一个对象,不然只是引用,其指向为空
private City city=new City();
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
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;
}
}
City.java
package com.jsp.el;
public class City {
private String address="泗洪";
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
el1.jsp
<%
Student student = new Student();
student.setName("tom");
request.setAttribute("s",student);
request.getRequestDispatcher("/el2.jsp").forward(request,response);
%>
el2.jsp
<%
Student stu = (Student) request.getAttribute("s");
out.print(stu.getName());
%>
${s.city.address}
2.4 list和map数据取值
el3.jsp
<body>
<%
List list = new ArrayList();
list.add("aaaa");
list.add("bbb");
list.add("vvvvv");
request.setAttribute("list",list);
Map map = new HashMap();
map.put("a","aaaaaaaaaaa");
map.put("b","bbbbbbbbbb");
map.put("c","vsdsfsfsfs");
request.setAttribute("map",map);
%>
${list}<br/>
${list[1]}<br/>
${map}<br/>
${map.a}<br/>
${map["a"]}
</body>
结果如下:
2.5运算符
2.5.1empty
判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true
案例代码:
<body>
<%
//empty
//判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true
String str1 = null;
request.setAttribute("str1",str1);
String str2 = "";
request.setAttribute("str2",str2);
String str3 = "abc";
request.setAttribute("str3",str3);
List list1 = new ArrayList();
request.setAttribute("list1",list1);
List list2 = new ArrayList();
list2.add("a");
request.setAttribute("list2",list2);
%>
${empty str1}<br/> //ture
${empty str2}<br/> //ture
${empty str3} <br/> //false
${empty list1}<br/> //ture
${empty list2}<br/> //false
</body>
2.5.2 三元运算
判断购物车中是否有物品:
${empty list2?"您还没购买过商品":"您的商品有:"}
从数据库中拿出值来判断是男是女:
<%
//从数据库中拿到是男生还是女生
int sex = 0;
request.setAttribute("s",sex);
%>
//通过三元运算 直接选中是男是女
${s==1?"1":"0"}
<input type="radio" name="sex" ${s==1?"checked='checked'":""}/>男
<input type="radio" name="sex" ${s==0?"checked='checked'":""}/>女
el中11个隐式对象
其中只有pageContext是对象
pageScope、requestScope、sessionScope、applicationScope都是Map对象
pageContext可以获取其他三大域对象
例:${pageContext.request.getContextPath}
cookie可以获取到sessionID
例:${cookie.JSESSIONID.value}
总结:
el表达式就是从四大域中拿数据
原理:
${u}==>pageContext.findAttribute("u");
${u.name}==>u.getName
原理点(.)相当于getter()方法