博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EL表达式
阅读量:5160 次
发布时间:2019-06-13

本文共 12829 字,大约阅读时间需要 42 分钟。

基本语法:${EL表达式}

1.获取数据

1)EL表达式只能获取四大域中的数据。

2)EL表达式获取的对象如果是null,页面不会显示数据。因此,EL表达式中永远不会出现空指针异常。

3).运算符和[]运算符

.运算符能做的,[]运算符也能做。[]运算符能做,.运算符不一定能做。

eg:

 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page import="cn.lsl.domain.Person"%>          
${person.name }

<% pageContext.setAttribute("pp","p1"); pageContext.setAttribute("pp","p2",PageContext.SESSION_SCOPE); request.setAttribute("pp","p3"); application.setAttribute("pp","p4"); %> ${pp }

${person.address.city }
${person.class }
${person['class'] }

<% String str[] = {"a","b","c"}; pageContext.setAttribute("str",str); %> ${str[1] }

<% List list = new ArrayList(); list.add("aa"); list.add("bb"); list.add("cc"); pageContext.setAttribute("list",list); %> ${list[2] }

<% Map map = new LinkedHashMap(); map.put("a","aaa"); map.put("b","bbb"); map.put("c","ccc"); pageContext.setAttribute("mm",map); %> ${mm.b }

<% Map map1 = new LinkedHashMap(); map1.put("1","aaa"); map1.put("2","bbb"); map1.put("3","ccc"); pageContext.setAttribute("mm1",map1); %> ${mm1["3"] }

<% Map map2 = new LinkedHashMap(); map2.put("a",new Person("lsl","男",true)); map2.put("b",new Person("zs","女",false)); map2.put("c",new Person("ls","女",true)); pageContext.setAttribute("mm2",map2); %> ${mm2["a"].name }
${mm2["b"].name }
${mm2.c.name }

2.数学逻辑运算

empty运算符:如果判断的对象是null或者空字符串,都返回true。对于集合对象本身不是                       null,没有任何元素,也返回true。

EL表达式不支持字符串连接操作。

eg:

 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>          
${empty p }

<% List list = new ArrayList(); list.add("aaa"); pageContext.setAttribute("list",list); %> ${empty list }

<% session.setAttribute("user","lsl"); %> ${empty user?"请登录":"欢迎您:" }${user }

<% pageContext.setAttribute("gender","0"); %> ${gender == "0"?"女":"男" }

3.获取JSP的内置对象(11大EL内置对象)

难点,不要与JSP的内置对象和范围名称搞混

11大EL隐式对象中,其中一个是表示自身对象外,其余都是表示的Map结构

                 

EL隐式对象名称                Java类型                                              备注

pageContext                     javax.servlet.jsp.PageContext                与JSP中的内置对象完全相同

剩余的都是代表的Map集合

pageScope                        java.util.Map                                        代表着PageContext页面范围域那个Map

requestScope                    java.util.Map                                        代表着ServletRequest请求范围域那个Map

sessionScope                    java.util.Map                                        代表着HttpSession会话范围域那个Map

applicationScope                java.util.Map                                        代表着ServletContext应用范围域那个Map

param                               java.util.Map                                        代表着请求参数。key:请求参数的名称。value:请求参数的值,它是 一个字符串。

paramValues                      java.util.Map                                        代表着请求参数。key:请求参数的名称。value:请求参数的值,它是 一个字符串数组。            

header                              java.util.Map                                        代表着请求消息头。key:头名称。value:头值,它是一个字符串。

headerValues                     java.util.Map                                        代表着请求消息头。key:头名称。 value:头值,它是一个字符串数组。

cookie                               java.util.Map                                        代表客户端提交的Cookie的Map。key:cookie的name。value:cookie对象本身

initParam                           java.util.Map                                        代表着全局初始化参数(web.xml中context-param).key:参数名称。value:参数值

eg:

 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page import="cn.lsl.domain.Person"%>      EL的11大隐式对象    
-----------------pageContext内置对象-----------------
${pageContext }
${pageContext.request }
${pageContext.request.contextPath }
${pageContext.response.characterEncoding }
-----------------pageScope内置对象-----------------
<% pageContext.setAttribute("pp","ppp"); pageContext.setAttribute("p",new Person("lsl","男",false)); %> ${pageScope.pp }
${pageScope.p.name }

<% pageContext.setAttribute("p1",new Person("lsl","男",false),PageContext.REQUEST_SCOPE); %> ${requestScope.p1.gender }

<% Person person = new Person("lsl","女",true); session.setAttribute("user",person); %> ${empty sessionScope.user?"请登录":"欢迎您:" }${sessionScope.user.name }

${param.username }
${param.password }

${paramValues.username[0] }
${paramValues.username[1] }
${paramValues.password[0] }

${header["accept-encoding"] }
${headerValues["accept-encoding"][0] }

${cookie["JSESSIONID"].name }
${cookie.JSESSIONID.value}

${initParam.encoding }

4.调用普通类的静态方法(EL函数)

编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤):

a、编写一个普通的java类,提供一个静态方法

public class FunctionDemo {        public static String toUpperCase(String str){            return str.toUpperCase();        }    }

b、在JavaWeb应用的WEB-INF目录下建立一个扩展名是tld(taglib definition)的XML文件(参考Tomcat中的示例)。内容如下:

 
1.0
myfn
http://www.lsl.cn/myfn
toUppercase
cn.lsl.el.FunctionDemo
java.lang.String toUpperCase( java.lang.String )

 

c、(可选步骤)前提是把tld文件放到了WEB-INF目录下。

告知应用,tld文件和tld中的uri的对应。修改web.xml,增加以下内容:

 
http://www.lsl.cn/myfn
/WEB-INF/myfn.tld

d、在JSP中使用

用taglib指令,引入自定义的EL函数库

<%@ taglib uri="http://www.lsl.cn/myfn" prefix="myfn"%>    ${myfn:toUppercase(p)}

eg:

FunctionDemo.java

 
package cn.lsl.el;public class FunctionDemo {    public static String toUpperCase(String str){        return str.toUpperCase();    }}

myfn.tld

 
1.0
myfn
http://www.lsl.cn/myfn
toUppercase
cn.lsl.el.FunctionDemo
java.lang.String toUpperCase( java.lang.String )

web.xml

 
http://www.lsl.cn/myfn
/WEB-INF/myfn.tld
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://www.lsl.cn/myfn" prefix="myfn"%>          
<% pageContext.setAttribute("p","abcdefg"); %> ${myfn:toUppercase(p)}

5.SUN提供的标准EL函数库

JSTL标准标签

需要导入JSTL的jar包。standard.jar jstl.jar

eg:

 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>          
${fn:contains("abc","bc") }
${fn:substring("shit",3,100) }
${fn:split("www.lsl.cn",".")[0]}${fn:split("www.lsl.cn",".")[1]}${fn:split("www.lsl.cn",".")[2]}
${fn:split("2013-04/26","-/")[0]}
${fn:split("2013-04/26","-/")[1]}
${fn:split("2013-04/26","-/")[2]}
<hr/>
<% pageContext.setAttribute("h","

haha

"); %> ${fn:escapeXml(h)}

拓展:

Functions标签库中常用的16个函数的用法

1)fn:contains函数用于判断在源字符串中是否包含目标字符串,其语法为:

fn:contains(String source,String target) -------boolean;

2)fn:containsIgnoreCase函数用于判断在源字符串中是否包含目标字符串,并且在判断时忽略大小写,其语法为:

fn: containsIgnoreCase (String source,String target) -------boolean;

3)fn:startsWith函数用于判断源字符串是否以指定的目标字符串开头,其语法为:

fn:startsWith(String source,String target) ----boolean

4)fn: endsWith函数用于判断源字符串是否以指定的目标字符串结尾,其语法为:

fn: endsWith (String source,String target) ----boolean

5)fn:indexOf函数用于在源字符串中查找目标字符串,并返回源字符串中最先与目标字符串匹配的第一个字符的索引,如果在源字符串中不包含目标字符串,就返回-1,源字符串中的第一个字符的索引为0。 fn:indexOf函数的语法为:

fn: indexOf (String source,String target) ----int

6)fn:replace函数用于把源字符串中的一部分替换为另外的字符串,并返回替换后的字符串。fn:replace函数的语法为:

fn: replace (String source,String before,String after) ----String

7)fn:substring函数用于获取源字符串中的特定子字符串,它的语法为:

fn:substring(String source,int beginIndex,int endIndex) ------String

8)fn:substringBefore函数用于获取源字符串中指定子字符串之前的子字符串,其语法为:

fn:substringBefore(String source,String target) ----String

9)fn: substringAfter函数用于获取源字符串中指定子字符串之后的子字符串,其语法为:

fn: substringAfter (String source,String target) ----String

10)fn:split函数用于将源字符串拆分为一个字符串数组,其语法为:

fn: split (String source,String delimiter) ----String[]

11)fn:join函数用于将源字符串数组中的所有字符串连接为一个字符串,其语法为:

fn:join(String source[],String separator) ----String

12)fn:toLowerCase函数用于将源字符串中的所有字符改为小写,其语法为:

fn:toLowerCase(String source)  -----String

13)fn: toUpperCase函数用于将源字符串中的所有字符改为大写,其语法为:

fn: toUpperCase (String source)  -----String

14)fn:trim函数用于将源字符串中的开头和末尾的空格删除,其语法为:

fn:trim(String source) ----String

15)fn:escapeXml函数用于将源字符串中的字符“<”、“>”、“””和“&”等转换为转义字符,本书第1章的1.2节(HTML简介)介绍了转义字符的概念。fn:escapeXml函数的行为与<c:out>标签的escapeXml属性为true时的转换行为相同,fn:escapeXml函数的语法为:

fn:escapeXml(String source) ----String

16)fn:length函数用于返回字符串中的字符的个数,或者集合和数组的元素的个数,其语法为:

fn:length(source) ---- int

6. c:if

作用:判断是否为true,如果为true,那么标签的主体内容就会显示。

属性:

         test:必须的。要求必须是boolean的。支持表达式(EL或Java表达式)

         var:保存test运算结果的变量

         scope: 保存的域范围。默认是page

eg:

 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>          
<% pageContext.setAttribute("result",true); %>
真的

<% session.setAttribute("user","lsl"); %>
对不起!请登录
欢迎您:${sessionScope.user }

<% List list = new ArrayList(); list.add("书"); session.setAttribute("cart",list); %>
对不起!您还未曾购物
您购买了如下东西

${result }

7.c:forEach

遍历:数组、List、Set、Map

属性:

         items:要遍历的目标对象。支持表达式

         var:变量名。指向当前遍历的集合中的一个元素

         begin:开始的索引(含)

         end:结束的索引(含)

         step:步长。默认是1

         varStatus:取一个名字,引用了一个对象。

                   该对象有以下方法:

                   int getIndex():当前记录的索引号。从0开始

                   int getCount():当前记录的顺序。从1开始

                   boolean isFirst():是否是第一条记录

                   boolean isLast():是否是最后一条记录

 

eg:

 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page import="cn.lsl.domain.Person"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>          
<% String str[] = {"a","b","c"}; pageContext.setAttribute("str",str); %>
${s }

<% List list = new ArrayList(); list.add("aa"); list.add("bb"); list.add("cc"); pageContext.setAttribute("list",list); %>
${s }

<% Set set = new HashSet(); set.add("aaa"); set.add("bbb"); set.add("ccc"); pageContext.setAttribute("set",set); %>
${s }

<% Map map = new LinkedHashMap(); map.put("a","aaaa"); map.put("b","bbbb"); map.put("c","cccc"); pageContext.setAttribute("map",map); %>
${me.key }==${me.value }

<% String s1[] = {"a","b","c","d","e","f"}; pageContext.setAttribute("s1",s1); %>
${s }

${s }

${s }

<% List
ps = new ArrayList
(); ps.add(new Person("zs","1",true)); ps.add(new Person("ls","1",false)); ps.add(new Person("ww","0",false)); ps.add(new Person("xl","0",false)); ps.add(new Person("xq","1",true)); ps.add(new Person("xb","1",false)); ps.add(new Person("xj","1",false)); pageContext.setAttribute("ps",ps); %>
${p.name}:${p.gender=="1"?"男":"女"}:${p.married?"已婚":"未婚"}

索引 顺序 第一个 最后一个 姓名 性别 婚姻
${vs.index } ${vs.count } ${vs.first } ${vs.last } ${p.name } ${p.gender=="1"?"男":"女"} ${p.married?"已婚":"未婚"}

顺序 姓名 性别 婚姻
${vs.count } ${p.name } ${p.gender=="1"?"男":"女"} ${p.married?"已婚":"未婚"}

转载于:https://www.cnblogs.com/jameslif/p/3726041.html

你可能感兴趣的文章
Javascript中eval解析的json的几种用法
查看>>
Dashbroad 展现数据
查看>>
Jedis路由key的算法剥离
查看>>
Codeforces Round #485 (Div. 2)
查看>>
记一次博客被群压的经历
查看>>
Java String codePoint相关api
查看>>
bzoj4447 SCOI2015 小凸解密码 password
查看>>
解析Ceph: RBDCache 背后的世界
查看>>
qt安装遇到的错误
查看>>
Linux下which、whereis、locate、find 区别
查看>>
h.264加权预测
查看>>
as4 通过yum自动升级实现
查看>>
mimtproxy的使用(windows)
查看>>
学习springMVC实例1——配置和跳转到HelloWorld
查看>>
注解@Slf4j
查看>>
92:Reverse Linked List II翻转链表【链表】
查看>>
JDBC 获取被插入数据的主键ID值
查看>>
new Date()时间对象
查看>>
Tomcat配置SSL连接
查看>>
最短路
查看>>