JSTL核心标签库简介
JSTL中的核心标签库主要用于完成基本的逻辑运算,在开发中使用较多。
在开发前导入相关jar包之后,还需要在页面中通过 taglib 指令将标签库导入:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
c:out标签
用于在页面上输出 EL 表达式的值,该标签不常使用,因为不使用该标签也能够在页面上输出EL表达式。
<%
pageContext.setAttribute("user", "admin");
%>
el表达式:${user }
<br/>
jstl中的out标签:<c:out value="${user }"></c:out>
c:catch标签
当有异常发生时,用于捕获异常。相当于 try-catch 中的 catch 代码块,该标签中只有一个属性 var,是捕获到的异常对象,名称可以自定义。该标签不常用,一般不会在页面中显示异常信息。
<c:catch var="e">
${pageContext.name};
</c:catch>
message = ${e.message }
c:if标签
该标签主要用于条件判断。
<%
pageContext.setAttribute("user", "admin");
%>
<c:if test="${user == 'admin' }" var="flag" scope="request">
欢迎登陆
</c:if>
- test:判断的条件。若为 true,则执行标签体中的内容,否则不执行。
- var:存储 test 的判断结果。不常用。
- scope:存储 test 判断结果的变量的存放范围。不常用。
c:choose标签
实现多分支判断。类似于 switch-case 语句。一个 标签中可以包含多个与一个。
<%
pageContext.setAttribute("hobby", "basketball");
%>
<c:choose>
<c:when test="${hobby == 'basketball'}">
我喜欢打篮球
</c:when>
<c:when test="${hobby == 'football'}">
我喜欢踢足球
</c:when>
<c:when test="${hobby == 'volleyball'}">
我喜欢打排球
</c:when>
<c:otherwise>
我没什么爱好
</c:otherwise>
</c:choose>
c:forEach标签
该标签用于循环遍历数组、集合(List、Set、Map),实际开发中使用较多。
<br>---------------------遍历数组--------------------------<br>
<%
Object[] city = {"北京","上海","广州","天津"};
pageContext.setAttribute("city", city);
%>
<c:forEach items="${city }" var="c">
${c }
<br>
</c:forEach>
<br>---------------------遍历List--------------------------<br>
<%
List<String> name = new ArrayList<>();
name.add("刘德华");
name.add("张学友");
name.add("黎明");
name.add("郭富城");
pageContext.setAttribute("name", name);
%>
<c:forEach items="${name }" var="n">
${n }
<br>
</c:forEach>
<br>---------------------遍历set--------------------------<br>
<%
Set<String> program = new HashSet<>();
program.add("java");
program.add("c");
program.add("python");
program.add("php");
pageContext.setAttribute("program", program);
%>
<c:forEach items="${program }" var="p">
${p }
<br>
</c:forEach>
<br>---------------------遍历map--------------------------<br>
<%
Map<String,String> map = new HashMap<>();
map.put("第一名", "中国");
map.put("第二名", "美国");
map.put("第三名", "德国");
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="m">
${m.key } : ${m.value }
<br>
</c:forEach>
指定遍历的起始索引及步长
对于数组及 List,可以指定遍历的起始索引及步长。
<br>---------------------指定遍历起始及步长--------------------------<br>
<%
Object[] country = {"0中国","1美国","2德国","3法国","4英国","5瑞士","6瑞典","7意大利"};
pageContext.setAttribute("country", country);
%>
<c:forEach items="${country }" var="c" begin="1" end="4">
${c }
<br>
</c:forEach>
- begin:指定遍历开始索引,从 0 开始计数。
- end:指定遍历结束索引,遍历结果包含这个索引。
<br>---------------------指定遍历起始及步长--------------------------<br>
<%
Object[] country = {"0中国","1美国","2德国","3法国","4英国","5瑞士","6瑞典","7意大利"};
pageContext.setAttribute("country", country);
%>
<c:forEach items="${country }" var="c" begin="1" end="7" step="2">
${c }
<br>
</c:forEach>
step:指定遍历时的步长。
标签中有一个属性 varStatus,该属性指定的变量是一个引用型变量。该引用
中记录了当前遍历对象的相关信息。该引用常用的方法如下:
- int getIndex():获取当前对象的索引。从 0 开始计数。
- int getCount():获取当前对象的序号。从 1 开始计数。
- boolean isFirst():判断当前对象是否是第一个对象。
- boolean isLast():判断当前对象是否是最后一个对象。
<%
List<Student> student = new ArrayList<>();
student.add(new Student("马云",22));
student.add(new Student("马化腾",26));
student.add(new Student("李彦宏",21));
student.add(new Student("周鸿祎",20));
student.add(new Student("雷军",28));
student.add(new Student("陈一舟",25));
student.add(new Student("柳传志",30));
pageContext.setAttribute("student", student);
%>
<table border="1">
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
</tr>
<c:forEach items="${student }" var="s" varStatus="obj">
<tr>
<td>${obj.count }</td>
<td>${s.name }</td>
<td>${s.age }</td>
</tr>
</c:forEach>
</table>
隔行着色
通过varStatus中的index控制隔行着色
<table border="1">
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
</tr>
<c:forEach items="${student }" var="s" varStatus="obj">
<tr style="background-color: ${obj.index % 2 == 0? 'orange':'red'}">
<td>${obj.count }</td>
<td>${s.name }</td>
<td>${s.age }</td>
</tr>
</c:forEach>
</table>