EL表达式学习(一):输出复杂的Bean对象

100 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

什么是EL表达式(摘自百度百科): 以MVC模式设计程序,JSP只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情。所以在JSP页面中应该尽可能少的、或者是完全不出现Java代码。

在使用JSP标准动作操作 JavaBean时,如果JavaBean的属性是 String类型或者基本类型,则能够实现类型的自动转换,如 JavaBean的属性从String类型可自动转换成int类型。如果 Javabean中的属性不是 String类型和基本类型,而是一个 Object类型,并且属性还有自己的属性,如何获得此 Object类型的属性呢?JSP标准动作中没有提供这种嵌套式访问机制,所以要想实现这个功能,就只能在JSP页面中通过Java代码来读取 Object类型的属性。从JSP2.0之后,可以使用EL表达式来处理这样的的问题。 [1] 

所以, EL是JSP 2.0增加的技术规范,其全称是表达式语言(Expression Language)。EL语言的灵感来自于ECMAScript和XPath表达式语言。EL表达式语言是一种简单的语言,提供了在JSP中简化表达式的方法,目的是为了尽量减少JSP页面中的Java代码,使得JSP页面的处理程序编写起来更加简洁,便于开发和维护。

今天学习的内容是:使用EL表达式输出Person类中的普通属性、数组属性,list集合属性和map集合属性 。

先创建Person.java:

package demo01;
 
import java.util.Arrays;
import java.util.List;
import java.util.Map;
 
public class Person {
 
//    需求————输出Person类中的普通属性、数组属性,list集合属性和map集合属性
 
    private String name;
    private String[] phones;
    private List<String> cities;
    private Map<String,Object> map;
 
    public Person(String name, String[] phones, List<String> cities, Map<String, Object> map) {
        this.name = name;
        this.phones = phones;
        this.cities = cities;
        this.map = map;
    }
 
    public Person() {
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String[] getPhones() {
        return phones;
    }
 
    public void setPhones(String[] phones) {
        this.phones = phones;
    }
 
    public List<String> getCities() {
        return cities;
    }
 
    public void setCities(List<String> cities) {
        this.cities = cities;
    }
 
    public Map<String, Object> getMap() {
        return map;
    }
 
    public void setMap(Map<String, Object> map) {
        this.map = map;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name=" + name +
                ", phones=" + Arrays.toString(phones) +
                ", cities=" + cities +
                ", map=" + map +
                '}';
    }
}

再创建demo03.jsp:

<%@ page import="demo01.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: pc
  Date: 2021/8/5
  Time: 10:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
 
    <%
        Person person = new Person();
 
        person.setName("哈哈哈");
        person.setPhones(new String[]{"12345678910","01379462850"});
 
        List<String> cities = new ArrayList<String>();
        cities.add("北京");
        cities.add("天津");
        cities.add("上海");
        person.setCities(cities);
 
        Map<String,Object>map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);
 
        pageContext.setAttribute("p",person);
 
 
    %>
 
    输出Person:${ p }<br>
    输出Person的name属性:${p.name}<br>
    输出Person的phones数组值:${p.phones[0]}<br>
    输出Person的cities集合的元素值:${p.cities}<br>
 
 
</body>
</html>

运行后的页面效果: