EL表达式
Posted 知行合一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EL表达式相关的知识,希望对你有一定的参考价值。
EL表达式:
最初出现的目的是用来取代jsp页面中的jsp脚本表达式.但是随着el的发展el的功能已经不限于此了
替代<%= %>脚本表达式,在j2ee1.4以前默认是不支持el,如果需要需要指定page指令[isELIgnored="true | false" ]为false,j2ee4.0后默认支持el
${el表达式}
(1)获取数据:
使用中括号的地方都可以使用点号替代,除了中括号中是数字或者中括号中包含特殊字符(-.)的情况除外
在中括号中如果不用双引号引起来则是变量,先找变量的值再拿变量的值使用.如果用双引号则是常量,直接使用常量的值
~获取常量
字符串/数字/布尔类型,直接写在el表达式中,el直接进行输出
~获取域中的变量
如果el中写的是一个变量的名,则el会调用pageContext的findAttribute方法,在四大作用域中以给定的名字找对应的属性值,找到后进行输出,如果四个域中都找不到,什么都不输出
~获取数组中的数据
~获取集合中的数据
~获取Map中的数据
~获取javabean的属性
获得域中的属性(~获取域中的变量)
${propName}在四个域中搜寻proName属性,输出该值到输出流中
${pageScope/requestScope/sessionScope/applicationScope.proName}获取指定域中的属性
${attr[0]}获取域中的集合的指定元素
${list[0]}获取list中的指定位置元素
${map.keyName}获取map中指定键的值
${bean.propName}获取javaBean的属性,可以认为是调用了javaBean的getXXX方法,
~最重要的一个应用场景:在写路径的时候最好不要把web应用名称写死,java中应该用request.getContextPath去获取。jsp中就用el获取:${pageContext.request.contextPth}
~.和[]区别使用点的地方都可以用中括号,如果属性名是数字或包含特殊符号(.-)就必须使用中括号。例子:${map["first.name"]}
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2 <%@page import="com.itheima.domain.Person"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 </head> 7 <body> 8 <h1>获取javabean的属性</h1><hr> 9 <% 10 Person p = new Person(); 11 p.setName("芙蓉姐姐"); 12 p.setAge(17); 13 pageContext.setAttribute("p",p); 14 %> 15 ${p.name }${p.age } ${p.name }//这里的p.name 中的name不是name属性,而且它被private修饰;其实el表达式底层调用了getName() 16 <img src="${pageContext.request.contextPath }/1.jpg"/> 17 18 <h1>获取Map中的数据</h1><hr> 19 <% 20 Map<String,String> map = new HashMap(); 21 map.put("name","奥巴马"); 22 map.put("age","17"); 23 map.put("gender","男"); 24 map.put("addr","白宫"); 25 map.put("name.xiao","小黑黑"); 26 pageContext.setAttribute("map",map); 27 pageContext.setAttribute("name","age"); 28 %> 29 ${map["name"] }${map["addr"] } 30 ${map.gender }${map.age } 31 ${map["name.xiao"] } 32 33 <h1>获取集合中的数据</h1><hr> 34 <% 35 List<String> list = new ArrayList<String>(); 36 list.add("甄嬛"); 37 list.add("安玲荣"); 38 list.add("凤姐"); 39 pageContext.setAttribute("list",list); 40 %> 41 ${list[2] } 42 43 <h1>获取数组数据</h1><hr> 44 <% 45 String [] names = {"容嬷嬷","紫薇","金锁","小燕子"}; 46 pageContext.setAttribute("names",names); 47 %> 48 ${names[2]} 49 <h1>获取域中的变量数据</h1><hr> 50 <% 51 String name = "灭绝师太"; 52 pageContext.setAttribute("name",name); 53 %> 54 ${name } 55 <h1>获取常量数据</h1><hr> 56 ${"阿萨德发射点发" } ${199 } ${true } 57 </body> 58 </html>
Person.java
1 package com.itheima.domain; 2 3 public class Person { 4 private String name; 5 private int age; 6 public String getName() { 7 return name; 8 } 9 public void setName(String name) { 10 this.name = name; 11 } 12 public int getAge() { 13 return age; 14 } 15 public void setAge(int age) { 16 this.age = age; 17 } 18 19 }
(2)执行运算:
算数运算
+-*/
逻辑运算
比较运算
三元运算符
empty运算符
(3)获取常用开发对象:el中内置了11个内置对象,这些对象el内置的,不需要提前定义就可以直接在el中使用
!pageContext -- 有了它可以很方便的获取jsp页面中的9大隐式对象
!pageScope -- page域中属性组成的Map
!requestScope -- request域中属性组成的Map
!sessionScope -- session域中属性组成的Map
!applicationScope --application域中属性组成的Map
!param -- 所有请求参数组成的Map<String,String>
paramValues -- 所有请求参数组成的Map<String,String[]>
header -- 所有请求头组成的Map<String,String>
headerValues -- 所有请求头组成的Map<String,String[]>
!cookie -- 所有cookie信息组成的Map<String,Cookie>
initParam -- 所有web应用的初始化参数组成Map
(4)调用java方法: -- 不需要大家自己会写调用方法的过程,只要会调用别人写好的标签库就可以了 fn标签库
~写一个类其中包含要被el调用的方法,这个方法必须是静态的方法
~写一个tld文件在其中对要被调用的静态方法进行一下描述
~在jsp页面中taglib指令将tld文件引入当前jsp页面,从而在jsp页面中就可以调用描述好的方法
以上是关于EL表达式的主要内容,如果未能解决你的问题,请参考以下文章