EL(Expression Language表达式语言)详解(下)

博客目录

  • 一、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函数)
     
发布了50 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/yangniceyangyang/article/details/103082117
今日推荐