EL表达式与JSTL标签库
来源:互联网 发布:秦淮数据靠谱吗 编辑:程序博客网 时间:2024/05/17 23:29
EL表达式
1 EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为"",(注意不是null)。
- 从Servlet获取的数据--data
- 该数据是String类型
String data = "abcd";request.setAttribute("data",data);%>
${data}<%--显示abcd --%>
<%-- pageContext.findAttribute("data") page-->request-->session-->application--%>
原理: 从这四个域中以data为关键字按顺序查找
- 从Servlet获取的数据--Person
- 此数据被封装到了JavaBean中
- Person拥有 name属性并 getName和setName方法
Person p = new person();p.setName("张三");request.setAttribute("person",p);%>
${person.name}<%--显示张三--%>
<%--pageContext.findAttribute("person")page-->request-->session->application--%>
原理: 从这四个域中以person为关键字按顺序查找
- 从Servlet获取的数据--Person(许多)
- 此数据被封装到了List集合中
- Person拥有name属性并拥有getName和setName方法
List list = new ArrayList();
list.add(new person("张三"));
list.add(new person("李四"));
list.add(new person("王五"));request.setAttribute("list",list);%>
${list[2].name}<%--显示王五--%>
<%--pageContext.findAttribute("list")page-->request-->session->application--%>
原理: 从这四个域中以list为关键字按顺序查找,找到list后以角标为关键字查找
- 从Servlet获取的数据--Person(许多)
- 此数据被封装到了Map集合中
- Person拥有name属性并拥有getName和setName方法
Map map = new HashMap();
map.put("aa",new person("张三"));
map.put("bb",new person("李四"));
map.put("11",new person("王五"));request.setAttribute("map",map);%>
${map.bb.name}<%--显示李四--%>
${map.[ ' 11' ].name}
<%--EL表达式在取数据时通常用点号(.),点号取不出来时,用方括号([ ])--%>
<%--pageContext.findAttribute("map")page-->request-->session->application--%>
原理: 从这四个域中以map为关键字按顺序查找,找到map后以bb为关键字查找
2 EL表达式中也可以使用${customerBean.address}的形式来访问JavaBean对象的属性。
- 从Servlet获取的数据--Person
- 此数据被封装到了复杂 JavaBean中
- Person拥有name属性并拥有getName和setName方法
- Person拥有Address属性并拥有setAddress和getAddress方法
- Address拥有City属性并拥有setCity和getCity方法
Person p = new person();
Address add = new Address();
add.setCity("上海");
p.setAddress(add);request.setAttribute("p",p);%>
${p.address.city}<%--显示上海--%>
<%--pageContext.findAttribute("p")page-->request-->session->application--%>
原理: 从这四个域中以p为关键字按顺序查找
3 结合JSTL的forEach标签,EL表达式也可轻松获取各种集合中的元素(对集合进行迭代操作)。
对List集合中的数据进行迭代操作
- 从Servlet获取的数据--Person(许多)
- 此数据被封装到了List集合中
- Person拥有name属性并拥有getName和setName方法
List list = new ArrayList();
list.add(new person("张三"));
list.add(new person("李四"));
list.add(new person("王五"));request.setAttribute("list",list);%>
<c:forEach var="person" items="${list}">
${person.name} <br/>
</c:forEach>
显示:张三<br/>李四<br/>王五<br/>
对Map集合中的数据进行迭代操作
- 从Servlet获取的数据--Person(许多)
- 此数据被封装到了Map集合中
- Person拥有name属性并拥有getName和setName方法
Map map = new HashMap();
map.put("aa",new person("张三"));
map.put("bb",new person("李四"));
map.put("11",new person("王五"));request.setAttribute("map",map);%>
<c:forEach var="entry" items="${map}">
${entry.key} : ${entry.value.name} <br/>
</c:forEach>
显示:aa 张三<br/>bb 李四<br/>11 王五
迭代原理:使用foreach标签对map集合进行迭代,其实是map调用entrySet()方法得到Set集合,然后对Set集合进行迭代。
4 结合JSTL的if 标签,EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。
// 代表用户已登录
<c:if test="${user!=null}">
欢迎您:${user.username}
</c:if>
//代表用户未登录
<c:if test="${user=null}">用户名:<input type="name" value="name">
密码:<input type="password" value="password">
</c:if>
5 EL表达式可以动态获取当前WEB应用的路径
${pageContext.request.contextPath}
原理:pageContext.getrequest().getContextPath()
JSTL标签库
JSTL是SUN公司开发的一套标签库,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码。
在页面中使用JSTL标签需完成以下2个步骤:
- 导入jstl.jar和standerd.jar这两个JSTL的jar文件。
- 在JSP页面中使用<%@tablib url="" prifix=""%>元素导入标签库。
url地址写法:在standerd.jar包的META-INF目录下的c.tld文件(对标签的描述文件)中有一个url,此url绑定了JSTL标签库中所有的标签,引人这个url即导入了JSTL标签库。
prifix(前缀)的名称可以采用引入的url的文件的前缀名(如c).
JSTL标签库主要分为5个部分:
- 核心标签库 描述文件: c.tld
- 国际化标签 描述文件: fnt.tld
- 数据库标签 描述文件: sql.tld
- XML标签 描述文件: x.tld
- JSTL函数(EL函数) 描述文件: fn.tld
核心标签库
<c:out>标签
<c:out>标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。
属性名
是否支持EL
属性类型
属性描述
Value
true
Object
指定要输出的内容
escapeXml
true
Boolean
指定是否将>、<、&、'、"等特殊字符进行HTML编码转换后再进行输出。默认值为true。
default
true
Object
指定如果Value属性的值为null时所输出的默认值
<c:set>标签
<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性。
属性名
是否支持EL
属性类型
属性描述
Value
true
Object
指定属性值
var
false
String
指定要设置的Web域属性的名称
scope
false
String
指定属性所在的Web域
targettrueObject指定要设置的属性的对象,这个对象必须是JavaBean对象或java.util.Map对象propertytrueString指定当前要为对象设置的属性名称
<c:remove>标签
<c:remove>标签用于删除各种Web域中的属性。
其语法格式如下:
<c:remove var="varName" [scope="{page|request|session|application}"]/>
<c:catch>标签
<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,
其语法格式如下:
<c:catch var="varName">nested actions</c:catch>
var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个Web域中。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page contentType="text/html;charset=GB2312"%>
<c:catch var="myex">
<%
int x = 10/0;
%>
</c:catch>
异常:<c:out value="${myex}"/> ${myex}<br/>
异常 myex.getMessage: <c:out value="${myex.message}"/><br/>
异常 myex.getCause: <c:out value="${myex.cause}"/><br/>
异常 myex.getStackTrace: <c:out value="${myex.stackTrace}"/><br/>
<c:if test="">标签可以构造简单的"if-then"结构的条件表达式
属性名
是否支持EL
属性类型
属性描述
test
true
boolean
决定是否处理标签体中的内容的条件表达式
var
false
String
指定将test属性的执行结果保存到某个Web域中的某个属性的名称
scope
false
String
指定将test属性的执行结果保存到哪个Web域中
<c:choose>标签
<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。
使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似"if--else if--else"的复杂条件判断结构。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page contentType="text/html;charset=GB2312"%>
<c:set value="${param.count}" var="count"/>pageContext(count,2)
<c:choose>
<c:when test="${count==0}">
对不起,没有符合您要求的记录。
</c:when>
<c:otherwisse>
符合您要求的记录共有${count}条
</c:otherwise>
</c:choose>
<c:forEach>标签
<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。
属性名
是否支持EL
属性类型
属性描述
var
false
String
指定将当前迭代到的元素保存到page这个Web域中的属性名称
varStatus
false
String
记住用于保存迭代信息的对象
items
true
任何支持的类型
将要迭代的集合对象
begintrueint如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的元素索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代endtrueint参看begin属性的描述steptrueint指定迭代的步长,即迭代因子的迭代增量
<style>
.odd{background-color: red;}
.even{background-color: blue;}
tr : hover{background-color: black;}
</style>
<table border="1" width="20%">
<c: forEach var="str" items="${list}" valStatus="status">
<tr class="${status.count%2==0?'even':'odd'}">
<td>${str}</td>
</tr>
</c:forEach>
</table>
<c:url>标签
<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是会将会话标识号以参数形式附加在URL地址后面
属性名
是否支持EL
属性类型
属性描述
Value
true
String
指定要构造的URL
var
false
String
指定将构造出的URL结果保存到Web域中的属性名称
scope
false
String
指定将构造出的URL结果保存到哪个Web域中
<c:redirect>标签
<c:redirect>标签用于实现请求重定向
属性名
是否支持EL
属性类型
属性描述
url
true
String
指定要转发或重定向到的目标资源的URL
context
true
String
当要使用相对路径重定向到同一个服务器下的其他WEB应用程序中的资源时,
context属性指定其他web程序的名称
<c:param>标签
在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。
<c:param>标签可以嵌套在<c:import>、<c:url><c:redirect>标签内,为这些标签所使用的URL地址附加参数。
<c:param>标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,如果传递的参数值为“中国”则将其转换为“%d6%d0%b9%fa”后再附加到URL地址后面。
<c:forTokens>标签
<c:forTokens>标签主要用来分割数据
属性名
是否支持EL
属性类型
属性描述
items
true
String
指定需要分割的数据
delims
true
String
指定以什么来分割数据
自定义标签
自定义标签主要用于移除JSP页面中的java代码。
要使用自定义标签移除JSP页面中的java代码,只需要完成以下两个步骤:
- 编写一个实现Tag接口的java类,把页面java代码移到这个java类中(标签处理器类)
- 编写标签库描述符(tld)文件,在tld文件中把标签处理器类描述成一个标签。
- EL表达式与JSTL标签库
- EL表达式与JSTL标签库
- EL表达式与JSTL标签库示例
- JSTL标签库与EL表达式
- EL表达式与JSTL标签库
- EL表达式与JSTL标签
- JSTL标签与EL表达式
- JSTL标签与EL表达式
- EL表达式与JSTL标签
- EL表达式、JSTL标签库
- JSTL标签库+EL表达式
- java中的El表达式 与jstl标签库
- EL表达式与JSTL(C)标签
- 【JavaWeb】EL表达式与JSTL标签
- EL表达式与JSTL标签的使用
- EL表达式与JSTL(C)标签
- EL表达式与JSTL(C)标签
- JSTL标签与EL表达式xaing
- 30分钟,让你成为一个更好的程序员
- 关于try...catch...finally中return的疑惑
- 智慧医疗缺的不仅是技术
- 关于camera拍照音的一点研究
- ZOJ 2830 Champion of the Swordsmanship
- EL表达式与JSTL标签库
- UVa 10130 - SuperSale
- 滚动条
- 第八周上机任务项目三
- 类与对象
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 利用Timer和图片框控件,编写一个图片不断向左移动的小动画
- vs2010 DirectShow(windows sdk v7.1)配置 [大三TJB_708]
- ALSA之CODEC分析