EL和JSTL

来源:互联网 发布:多益网络2018校招 编辑:程序博客网 时间:2024/06/14 00:00

EL和JSTL

1.什么是EL表达式

EL(Expression Language)是一门表达式语言,对应与<%=…%> 所以EL表达式会被输出
格式:${…}
使用EL表达式时,要求page指令的isELIgnored属性为false,这样编译时才不会忽略EL表达式
\${…} 前面加\,java编译器会忽略此EL表达式


2.EL操作对象的方式

操作变量和常量:${name},${8}
操作List和数组:${list[0]},${arr[0]}
操作bean的属性:${person.name},${person[‘name’]}对应person.getName()方法
操作Map的值:${map,key},${map[‘key’]}对应map.get(key);

3.EL表达式运算

eq==  ne!=   mod%   lt<   gt>   le<=   ge>=
and&&   or||   not!   判断是否为空${ empty “”}返回true
判断非空 ${empty not “”}返回false

4.EL内置对象

在EL表达式中有11个内置(隐含,隐藏)对象(无需创建就可以使用的对象)
都与Map相似,10个Map,一个是PageContext
a)参数内置对象
都是Map类型
param:是Map<String,String>类型,param对象用来获取参数,与request.getParameter()方法相同
${param.username}获取传入的username
多值的接收
$(paramValues.favor[0]),$(paramValues.favor[1]) //接收favor属性的2个值
头信息的接收
${header.Host} 一般为localhost:8080
ServletContext的级别的参数获取
${initParam.person_name}ServletContext里面person_name对应的值
Cookie的取值
${cookie.key.name}:${cookie.key.value} 取Cookie的key的name和value值

b)域内置对象
获取域对象中保存的数据,例如${pageScope.xxx}或${pageScope[‘xxx’]}表示获取在pageContext保存的数据
pageScope 是Map<String,Object>类型
${pageScope.xxx}的功能和pageContext.getAttribute(“xxx”)一致 xxx为String类型的key值
区别数据不存在时,$返回空字符串,后者返回nul
l
requestScope 装载request对象中所有数据
sessionScope 装载session对象中所有数据
applicationScope 装载application对象中所有数据
${a} a不是隐藏对象时
四个域page-request-session-application顺序查找,都找不到返回空字符串

JSTL

1.JSTL概述

JSP标准标记库(JSP Standard Tag Library,JSTL)是一个实现Web应用程序中常见的通用功能的定制标记库集,包括迭代,条件判断,数据管理格式化,XML操作,数据库访问。(来自第三方,需要导包)

2.导入标签库

用taglib指令Alt+/补全查找包含jstl和core即可
<%@taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
大致如上,core为核心库 fmt数据格式化 functions函数库

3.JSTL核心库

out
<c:out value=”${111}”></c:out>
输出111
<c:out value=”${name}” default=”unknow”></c:out>
name没有指向值,执行default输出unkown(缺省值)
<c:out value=”${‘<font color=red>111</font>’}” escapeXml=”false”></c:out>
escapeXml=”false”输出红色的111(解析了html代码) true输出<font color=red>111</font>
${‘<font color=red>111</font>’}跟false一样输出红色的111

set
set标签的var,value,scope是一组,target,property,value是一组
<c:set var=”name” value=”xxx”></c:set>
//set一个变量name值为xxx 默认存page域中
<c:set var=”name” value=”xxx” scope=”request”></c:set>
//scope指定存的域为request
<c:set target=bean类 property=类属性名 value=赋值></c:set>
//给bean类属性重新赋值


if

<c:if test="${not empty name}">
<c:out value="${name}"></c:out>
</c:if>
//如果name不为空 输出name的值

choose
<c:set var="score" value="40"></c:set>
<c:choose>
<c:when test="${score<60}">
<c:out value="${'没及格'}"></c:out>
</c:when>
<c:when test="${score>=60 && score<80}">
<c:out value="${'及格'}"></c:out>
</c:when>
<c:otherwise>
<c:out value=${'优秀'}>
</c:otherwise>
</c:choose>
//起if else的作用

forEach(重点)
<c:forEach begin="1" end="10" var="i" step="1">
<c:out value="${i}"></c:out>
</c:forEach>

<c:forEach items="${key}" var="str">
<c:out value="${str}"></c:out>
</c:forEach>
//key是存储value值(这里可以为数组,list,map)set属性的key值名 用var的str变量名去指向提取
<c:forEach items="${xxx}" var="p">
<c:out value="${p.key}"></c:out><c:out value="${p.value}"></c:out>
</c:forEach>

//xxx是set时map对应的key值,用var的p.key,p.value访问map的k-v


<c:forEach begin="1" end="10" var="i" step="1" varStatus="vs">
<c:out value="${vs.current}"></c:out>//当前对象1-10
<c:out value="${vs.index}"></c:out>//从0开始的索引号0-9
<c:out value="${vs.count}"></c:out>//遍历了几个1-10
vs.first//是否是第一个迭代对象
vs.last//是否是最后一个迭代对象 一般用于判断

4.JSTL格式化标签库


数值的格式化
导入fmt

<fmt:formatNumber value="123456789" pattern="#,###.00"></fmt:formatNumber>
//定制数字格式 #按照默认格式 ###(#00)3位一分割,.00保留2位小数 最后输出123,456,789.00
<fmt:formatNumber value="123456789" pattern="#.00" type="currency"></fmt:formatNumber>
//货币 输出¥123,456,789.00
<fmt:formatNumber value="0.23" type="percent"></fmt:formatNumber>
//百分比 输出23%(会四舍五入)

时间格式化
<jsp:useBean id="now" class="java.util.Date"></jsp:useBean>
<fmt:formatDate value="${now}"/>//输出2017-9-19格式的当前时间
<fmt:formatDate value="${now}" type="both" dateStyle="long" timeStyle="long"/>
//输出long格式的2017年9月19日 上午xx时xx分xx秒
<fmt:formatDate value="${now}" type="both" pattern="yyyy-MM-dd HH:mm:ss"/>
//both表示日期和格式全输出 输出为2017-9-19 xx:xx:xx

5.EL函数库

导入function
$(fn:length(arr))//arr长度 arr可换成list
$(fn:toLowerCase('H'))//变小写h 大写toUpperCase
$(fn:contains('adcd','bc'))//是否包含 true containsIgnoreCase忽略大小写
${fn:endsWith("apple","le")}//startsWith
${fn:indexOf("apple","l")}//第几个 输出4
${fn:join(arr,"-")}//arr数组用-连接
${fn:replace("appoe","o","e")}//e替换o输出apple
${fn:join({fn:split("11-11-11","-"),":"}}//split去除 输出11:11:11
${fn:substring("12345",1,3)}
//截取 输出23 若3改为-1则取到底2345
substringAfter("12345","3") 45
substringBefore("12345","3") 12
${fn:trim(" a b c ")}//去除头尾空格输出a b c
$(fn:escapeXml("<font color=red>111</font>"))
//逃脱Xml格式 输出<font color=red>111</font>不会被解析
原创粉丝点击