当前位置: 代码迷 >> JavaScript >> JSTL的施用
  详细解决方案

JSTL的施用

热度:277   发布时间:2012-10-28 09:54:44.0
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>
      </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中的begin , end, step属性,begin:从哪里开始循环,end:到哪里结束,step:每次循环的步长
■ 可以用c:forEach接受的除了List还有Map,接受Map的时候还可以分别取出key和value的值,例子:
<c:forEach items="${map}" var="v" >
     ${v.key } = ${v.value }<br>
</c:forEach>
⑹,c:forTokens 用于有分隔符字符串的迭代,delims属性用来设置分隔符的类型(逗号啦,斜杠啦),看例子:
action中的送值
request.setAttribute("forTokens","1,2,3,4,5");
request.setAttribute("forTokens2","/oracle/db/9.2.0");
JSP中的接收值
<c:forTokens items="${forTokens}" delims="," var="v">    ←分隔符为逗号
    ${v }<br>
</c:forTokens>
   <p>
<c:forTokens items="${forTokens2}" delims="/" var="v">   ←分隔符为斜杠
    ${v }<br>
</c:forTokens>
结果如下:
1
2
3
4
5
oracle
db
9.2.0

⑺,c:catch,捕获异常,相当于java语法的 try......catch,可以用c:catch的var属性打印异常信息
<c:catch var="v">
     <%
      Integer.parseInt("heihei");        //这里故意整一个错误,把字符串转化为int格式,当然出错了
     %>
</c:catch>
${v }


输出结果:
java.lang.NumberFormatException: For input string: "heihei"
⑻,c:import,相当于include,在当前页中引入另一个页面,用法如下:
<c:import url="http://localhost:8080/struts_JSTL_EL/"></c:import>

⑼,c:redirect 重定向
<c:redirect context="/struts_JSTL_EL" url="/index.jsp"></c:redirect>
结果:当前页面会重定向到 http://localhost:8080/struts_JSTL_EL/index.jsp去,就这么个事

③,格式化库(fmt)
在JSP中加入支持标签的语句,<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
※:先贴一段在action中的传值,后面的格式化时间和格式化数字都会用到
request.setAttribute("today",new Date());
request.setAttribute("number",1234566.678);
request.setAttribute("percent", 0.12345);
⑴,格式化时间,fmt:formatDate
<fmt:formatDate value="${today}"/><br>
输出结果:2009/04/22
<fmt:formatDate value="${today}" type="date"/><br>
输出结果:2009/04/22
<fmt:formatDate value="${today}" type="time"/><br>
输出结果:18:24:21
<fmt:formatDate value="${today}" type="both"/><br>
输出结果:2009/04/22 18:24:21
⑵,格式化数字,fmt:formatNumber
<fmt:formatNumber value="${number}"/><br>
输出结果:1,234,566.678   //type默认是数字且有逗号分隔
<fmt:formatNumber value="${number}" pattern="###,###.##"/><br>
输出结果:1,234,566.68    //pattern和struts中的一样
<fmt:formatNumber value="${number}" pattern="###,###.0000"/><br>
输出结果:1,234,566.6780 //小数点后不够4位就补零
<fmt:formatNumber value="${number}" type="currency" currencySymbol="$"/><br>
输出结果:1,234,566.68    //type设为通货,currencySymbol设美元符号
<fmt:formatNumber value="${percent}" type="percent"/><br>
输出结果:12%             //type设为百分数
<fmt:formatNumber value="${percent}" type="percent" maxFractionDigits="2" minFractionDigits="2"/><br>
输出结果:12.34%          //type设为百分数,且小数点后最大最小都留2位