EL变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page范围找,假如找不到,再依序到Request、Session、 Application 范围。假如途中找到username,就直接回传,找不到,再依序到Request、Session、 Application 范围。假如途中找到username,就直接回传null
EL 表达式中的 11个隐含变量
- 与范围有关的隐含对象
applicationScope
sessionScope
requestScope
pageScope - 与输入有关的隐含变量
param
paramValues - 其他隐含变量
cookie
header
headerValues
initParam
pageContext
演示
- EL 的 . 或 [] 运算符
<%
Customer customer = new Customer();
customer.setName("jin");
customer.setAge(18);
session.setAttribute("customer", customer);
//域中含有特殊字符
session.setAttribute("com.athome", customer);
%>
age:${sessionScope.customer.age }
<br>
<!-- 域中含有特殊字符是,[] 会方便很多 -->
name:${sessionScope["com.athome"].name }
<br>
- EL 的隐含对象
会按照 page, request ,session ,application 依次找属性中是否有 customer 属性,有则调用 customer.getAge() 方法
<!-- 会按照 page, request ,session ,application 依次找属性中是否有 customer 属性,有则调用 customer.getAge() 方法 -->
age:${customer.age}
<br>
- EL 可以进行自动类型转换
<!-- 从 a.jap 中传过来的 score = 88 -->
<!-- EL 表达式可以进行自动类型转换 -->
Score1:${param.score + 11 }
<br>
Score2:<%= request.getParameter("score") + 11 %>
<br>
- 隐含对象之范围相关的:pageScope, requestScope, sessionScope , applicationScope
<%
application.setAttribute("time", new Date());
%>
Time:${applicationScope.time.time }
<br>
<!-- 等价于 -->
<%--
<%= ((Date)application.getAttribute("time")).getTime()%>
--%>
- 与输入有关的隐含对象:param,patamValues
ScoreByParam:${param.score }
<br>
ElementsByParamValues:${paramValues.name[0] }
<br>
<!-- 6,其他隐含对象: pageContext 等 (cookie,header,initParam 了解即可) -->
contextPath:${pageContext.request.contextPath }
<br>
sessionID:${pageContext.session.id }
<br>
sessionAttributeNames:${pageContext.session.attributeNames }
<br>
- EL 运算符
${param.score > 70?"及格" : "不及格" }
<br>
<%
List<String> names = new ArrayList<String>();
names.add("cc");
request.setAttribute("names", names);
%>
<!-- empty 可以作用于一个集合,若该集合不存在或集合中没有元素,其结果都为 true -->
name is empty:${empty requestScope.names }
<br>
- EL 自定义函数
第一步:在一个类中定义静态函数
public class Fun {
//结合两个字符串
public static String Add(String str1,String str2) {
return str1 + str2;
}
}
第二步:在 tld 文件中
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 描述tld 文件 -->
<description>myTag 1.0</description>
<display-name>myTag core</display-name>
<tlib-version>1.0</tlib-version>
<!-- 建议使用标签的前缀 -->
<short-name>athome</short-name>
<!-- 作为tid 文件的id,用来唯一标识当前的 tld 文件,多个tld 文件的uri 不能重复,通过 jsp 中的tablib 标签的 uri 来引用 -->
<uri>http://www.athome.com/myTag/core</uri>
<!-- 字符串相加 -->
<function>
<!-- 调用函数名 -->
<name>add</name>
<!-- 类原路径 -->
<function-class>athome.simpletag.Fun</function-class>
<!-- 函数签名 -->
<function-signature>java.lang.String Add(java.lang.String,java.lang.String)</function-signature>
</function>
</taglib>
第三步:在 jsp 文件中引入并使用函数
//第一步:引用
<%@ taglib uri="http://www.athome.com/myTag/core" prefix="athome" %>
<body>
//第二步:调用函数
${athome:add(param.name1,param.name2)}
</body>