(1)jstl是什么
apache开发的一套jsp标签,后来捐献给了sun,
sun将其命名为jstl。
(2)如何使用jstl
step1,将jstl相关的jar文件拷贝到WEB-INF\lib下。
注:
如果使用javaee5.0(包含了jstl相关的jar文件) ,
一般不需要再拷贝了。
step2,使用taglib指令导入相应的标签。
<%@taglib uri="http://www.tarena.com.cn/tag"
prefix="c"%>
uri是一个命名空间,
prefix是命名空间的前缀(别名)。
注:
命名空间(namespace)是为了区分同名元素而设置
的一个字符串。
(3)jstl几个核心的标签
1)if
<c:if test="" var="" scope="">
标签体
</c:if>
当test属性值为true时,容器会执行标签体的内容。
test属性可以使用el表达式来计算。
var属性:指定一个绑订名称。
scope属性:指定绑订的范围,值可以是(page,request,
session,application)。
2)choose
<c:choose>
<c:when test="">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
when可以出现1次或者多次,表示一个分支,当
test属性值为true时,会执行该分支。
othewise可以出现0次或者1次,表示例外。
3)forEach
<c:forEach items="" var="" varStatus="">
</c:forEach>
用来遍历集合或者数组。
items属性用来指定要遍历的集合或者数组,可以
使用el表达式。
var属性:用来指定一个绑订名,绑订范围固定是
pageContext。
注:每次从集合或者数组中取一个元素,然后将其
绑订到pageContext上,绑订名由var属性来指定。
varStatus属性:用来指定一个绑订名,绑订范围固定是
pageContex。
注:
绑订值是一个特殊的对象,该对象提供了一些
方法,用来获得当前遍历的状态。
getIndex() : 获得当前被遍历的元素的下标(
从0开始 )。
getCount():获得当前是第几次遍历(从1开始)
<c:forEach items="${requestScope.users}" var="user" varStatus="s">
<tr class="row${s.index%2+1}">
<td>${s.index}</td>
<td>${user.name}</td>
<td>
<c:if test="${user.gender=='m'}" var="flag" scope="request">男</c:if>
<c:if test="${!flag}">女</c:if>
</td>
<td>
<c:if test="${user.age<18}" var="flag" scope="request">未成年</c:if>
<c:if test="${!flag}">成年</c:if>
</td>
<td>${s.count}</td>
<td><a href="2.jsp">update</a></td>
</tr>
</c:forEach>
4.自定义标签
1.建类
public class DateTag extends SimpleTagSupport {
Private String pattern;
public String getPattern() {
return pattern;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
@Override
public void doTag() throws JspException, IOException {
PageContext ctx=(PageContext)getJspContext();
JspWriter jw=ctx.getOut();
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat(pattern);
String d=sdf.format(date);
jw.println(d);
}
}
1.1继承SimpleTagSupport
1.2定义属性(接收页面指定的参数)添加GET/SET方法
1.3重写doTag方法
PageContext ctx=(PageContext)getJspContext();
JspWriter jw=ctx.getOut();
2.建tag.tld(参考c.tld)
2.1
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.1</tlib-version>
<short-name>c1</short-name>
<uri>aaa</uri>
<tag>
<name>date</name>
<tag-class>DateTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>pattern</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
3.jsp页面
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@taglib uri="aaa" prefix="c1"%>
<html>
<head></head>
<body style="font-size:30px">
<c1:date pattern="yyyy-MM-dd"/>
</body>
</html>