探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
今天我们继续学习JSP中的EL和JSTL。
EL表达式
EL(expression language)表达式是JSP中获取数据的一种规范,它主要用于简化jsp中java代码开发。
利用EL表达式获取数据
我们利用EL表达式获取数据,但是请务必注意它只可以获取存在4个作用域中的数据。
语法格式:${ }
比如,我们在session中存了数据:
session.setAttribute(“name”, “波少野结衣”);
那么我们可以利用EL表达式获取存的数据
${name}
嗯哼,这里使用EL表达式就非常简单了,究其根本是因为${}背后执行的是pageContext.findAttribute( )。
与此类似,如果我们有一个User类,其中有name属性,user是该类的对象。现在将该对象保存到域中后,如果要获取该对象的name可以这么写:
${user.name}
该方式就等效于user.getName()。也就是说在EL表达式中.运算符相当于调了getter方法。同理如果User中有一个Address属性,Address中又有一个city,我们也可以通过该方式获取city的值
${user.address.city}
还有一个功能与.运算符非常类似的运算符[],但它比.运算符要强大许多,在此不再赘述。
EL表达式的简单运算
我们还可以利用EL表达式做一些简单的运算。
利用empty判断null
它会将空字符串和没有元素的集合都判断为null即返回true,示例如下:
${empty object}
EL的三元运算符
请看如下示例:
${empty user ? “未登录”:”已经登录”}
EL表达式的隐式对象
在之前的文章中介绍了JSP的内置对象,在此列举几个EL表达式的常用对象
pageContext
对应于JSP页面中的pageContext对象
pageScope
代表page域中用于保存属性的Map对象
requestScope
代表request域中用于保存属性的Map对象
sessionScope
代表session域中用于保存属性的Map对象
applicationScope
代表application域中用于保存属性的Map对象
param
表示一个保存所有请求参数的Map对象
paramValues
表示一个保存了所有请求参数的Map对象,它对于某个请求参数返回一个string类型数组
header
表示一个保存了所有http请求头字段的Map对象
headerValues
表示一个保存了所有http请求头字段的Map对象,返回string类型数组
cookie
表示一个保存了所有cookie的Map对象
initParam
表示一个保存了所有web应用初始化参数的map对象
JSTL
JSTL简介
从JSP 1.1规范开始JSP就支持使用自定义标签,使用自定义标签极大地降低了JSP页面的复杂度,同时增强了代码的重用性,所以自定义标签在WEB应用中被广泛使用。故,许多WEB应用厂商都开发出了自己的一套标签库,这导致出现了许多功能相同的标签,令开发人员手忙脚乱,无所适从。为了解决该问题,Apache开发了一套用于解决这些常用问题的自定义标签库,这套标签库被SUN公司定义为标准标签库(The JavaServer Pages Standard Tag Library),简称JSTL。在开发中可使用JSTL实现JSP页面中逻辑处理,如判断、循环等等操作。
添加JSTL
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
- 利用taglib指令设置JSTL的路径和前缀名
- 导入包jstl.jar和standard.jar
JSTL常用标签
<c:set>标签
用于设置各种域中的属性
<c:out>标签
用于输出一段文本内容到客户端浏览器
<c:remove>标签
用于删除各种域中的属性
<c:if>标签
用于条件判断
<c:choose>标签
该标签非常类似于Java中的switch语句,用于多个条件选择。它必须与<c:when>和<c:otherwise>一起使用
<c:forEach>标签
用于对集合对象进行循环迭代操作
请看如下示例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL</title>
<style type="text/css">
</style>
</head>
<body>
<!-- 测试set、remove、out -->
<c:set var="number" value="9527" scope="session"/>
number=<c:out value="${number}"/>
<c:remove var="number" scope="session"/>
number=<c:out value="${number}" default="没有取到number的值"/>
</br>
<!-- 测试if -->
<c:if test="${9527>1234}">
zxx number is 9527
</c:if>
</br>
<!-- 测试choose -->
<c:set var="size" value="${3}"></c:set>
<c:choose>
<c:when test="${size==1 }">The size is 1</c:when>
<c:when test="${size==2 }">The size is 2</c:when>
<c:when test="${size==3 }">The size is 3</c:when>
<c:otherwise>
The size is other
</c:otherwise>
</c:choose>
</br>
<!-- 测试forEach -->
<c:forEach var="i" begin="1" end="20" step="3">
${i}<br/>
</c:forEach>
</br>
<%
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
request.setAttribute("list", list);
%>
<c:forEach items="${list}" var="listitem">
${listitem}<br/>
</c:forEach>
<br/>
<!-- 测试forEach -->
<%
List arrayList = new ArrayList();
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("ccc");
arrayList.add("ddd");
arrayList.add("eee");
request.setAttribute("arrayList", arrayList);
%>
<table border="1">
<tr>
<th>数据</th>
<th>索引</th>
<th>计数</th>
<th>是否是第一个</th>
<th>是否是最后一个</th>
</tr>
<c:forEach items="${arrayList}" var="item" varStatus="vs">
<tr>
<td>${item}</td>
<td>${vs.index}</td>
<td>${vs.count}</td>
<td>${vs.first}</td>
<td>${vs.last}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
运行后效果如下图所示: