JSTL的使用
JSTL标签
①,JSTL标签的EL表达式
使用很简单,不用在JSP中写入支持标签的语句,直接可以拿来用。
${hello} 等同于 <%= request.getAttribute("hello") %>
EL表达式还支持四则运算,大小比较(返回true或false),为空验证(${empty hello},返回true或false),还支持如${group.name} ${map.key}返回相应的值
②,JSTL核心库 (c标签)
首先,你要把jar包引进去,这里有个问题,如果是struts1.3.10的话,其自带的jstl包是1.0版本,而1.0版本的jstl在2.0的JSP中,会有问题。所以要下个1.1以上版本的jstl包,下载地址在此:http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
然后,在JSP中加入支持标签的语句,<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
⑴,c:out 就是做输出
<c:out value="${hello}"/> 等同于 ${hello}
<c:out value="${abc}" default="haha"/> 如果${abc}不存在,那么给一个初始值haha
String HTML = "<font color='red'>北京欢迎你</font>";
request.setAttribute("bj", HTML); action中把值送出来
<c:out value="${bj}" escapeXml="false"> escapeXml:是否脱离XML语法,不是的话,就还是按照HTML语法解析,输出结果:北京欢迎你
⑵,c:set , c:remove
c:set 等于在page级别,setAttribute一个值,在当前页面用c:out可以接收到,例如:
<c:set value="beckham" var="player"/>
c:remove就是把一个属性值从当前page中删了,例如:
<c:remove var="player"/>
⑶,c:if 就是个条件分支语句,只能表达出if,没有else
<c:if test="${1 < 2}" var="result">
1 < 2<br>
${result }<br>
</c:if>
输出结果:
1 < 2
true
⑷,c:choose,c:when,c:otherwise,其实也是个条件分支语句,不过这次可以形成if。。。else的组合了^_^
c:when就是if,c:otherwise就是else,要注意的是c:when,c:otherwise必须写在c:choose标签的里面
<c:choose>
<c:when test="${v1 < v2}">
v1 < v2<br>
</c:when>
<c:otherwise>
v1 > v2<br>
</c:otherwise>
</c:choose>
⑸,c:forEach, 就是个循环
<c:forEach items="${userList}" var="user"> ←这里的var相当于把一个对象Attribute取出来后,给这个对象起的名字(也就是这个对象的引用),下面就可以用这个引用来显示该对象的属性
<tr>
<td>${user.username }</td>
<td>${user.age }</td>
<td>${user.group.name }</td>
</tr>
</c:forEach>
输出结果如下
name age group
選手 0 20 AC milan
選手 1 21 AC milan
選手 2 22 AC milan
選手 3 23 AC milan
選手 4 24 AC milan
■ c:forEach中的varStatus属性 ,varStatus可以记录本次循环的一些信息,比如现在循环到第几次啦,就是vs.count ,下面这个例子,当循环进行到偶数次时,改变背景颜色为黄色
<c:forEach items="${userList}" varStatus="vs" var="user">
<c:choose>
<c:when test="${vs.count % 2 == 0}"> ←如果是偶数次,背景色变为黄色
<tr bgcolor="yellow">
</c:when>
<c:otherwise> ←如果步是偶数次,背景色不变
<tr>
</c:otherwise>
</c:choose>
<td>${user.username }</td>
<td>${user.age }</td>
<td>${user.group.name }</td>
</tr>