JSTL标签库技术学习

来源:互联网 发布:算法 英文版 pdf 编辑:程序博客网 时间:2024/05/18 00:57

JSTL标签库的主要函数演示。
导包

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

c:out标签演示

c:out标签等价 ${ 标识符} 的输出功能,不同点在于 c:out标签有两个属性
defalut属性,当读取的属性不存在,则输出默认值
escapeXml属性, 当该属性设置为true(默认)时,会把”<”编码成”<”输出,若设为false则不编码

h3>c:out标签演示</h3>    <%        pageContext.setAttribute("name", "Jack");        pageContext.setAttribute("age", "22");     %>    <c:out value="${name}"></c:out>  , ${name} <br/>    <!-- c:out标签和EL表达式输出的区别在于该标签的两个属性:defalut和escapeXml  -->    <!-- 1. defalut属性,当读取的属性不存在,则输出默认值  -->    <c:out value="${age}" default="18"></c:out>    <!-- 2. escapeXml属性, 当该属性设置为true(默认)时,会把"<"编码成"&lt;"输出,若设为false则不编码  -->    <%       pageContext.setAttribute("str", "<font color='red'>湖南城院</font>");     %>    ${str}, <c:out value="${str}" escapeXml="true"></c:out> 

这里写图片描述

c:set标签演示

1.给JavaBean设置属性
2.给String类型的变量赋值, 相当于编程中的:定义变量

<h3>c:set标签演示</h3>    <!-- 1.给JavaBean设置属性 -->    <jsp:useBean id="u" class="cn.hncu.domain.User"></jsp:useBean>    <c:set target="${u}" property="name" value="Tom" ></c:set>    <c:set target="${u}" property="age" value="25" ></c:set>    <c:set target="${u}" property="pwd" value="1234" ></c:set>    <c:out value="${u}"></c:out>    <br/>    <!-- 2.给String类型的变量赋值, 相当于编程中的:定义变量  -->    <c:set var="sum" value="120" scope="request"></c:set>    <c:out value="${sum}"></c:out>    <br/><br/><br/>    <h3>c:remove标签演示</h3>    <c:remove var="sum" scope="request"/> <!-- 如果没指定scope则依次从4个容器找 -->    <c:out value="${sum}" default="0"></c:out>

这里写图片描述
* c:if标签演示 *

和Java中的 if–else 类似

<h3> c:if标签演示 </h3>    <!-- 如果显示块比较复杂,那么用c:if显然比直接用EL表达式好得多 -->    ${age>20? "成年啦!!!!":"嫩了点" } <br/>    <!-- 用c:if写   if-else -->    <c:if test="${age>20}" var="boo">  <!-- 把test中的测试条件的结果值存放到变量var中(可以指定scope) -->               成年啦!!!!<br/>       <form>           Name:<input type="text" name="name"/> <br/>           Pwd:<input type="password" name="pwd"/> <br/>           <input type="submit"/>       </form>    </c:if>    <c:if test="${!boo}">        嫩了点    </c:if>    <c:if test="${age<20}">              嫩了点    </c:if>

这里写图片描述
c:forEach标签演示

用来遍历的标签,

<h3>c:forEach标签演示</h3>     <p>一、普通for循环的功能</p>     <c:forEach begin="1" end="10" step="2" var="i">         ${i}:欢迎光临&nbsp;     </c:forEach>     <br/>     <p>二、增强for循环的功能:遍历集合, forEach标签中的items属性代表被遍历的集合,var代表每次循环读出的元素</p>     <!-- 1. 遍历数组 -->     <%        String strs[]={"aa","bb","111"};        pageContext.setAttribute("strs", strs);      %>     <c:forEach items="${strs}" var="str">        ${str},,     </c:forEach>     <br/>     <!-- 2. 遍历List -->     <%         List list = new ArrayList();         list.add("aaa");         list.add("bbb");         list.add("666");         pageContext.setAttribute("list", list);      %>     <c:forEach items="${list}" var="str">         ${str}&nbsp;     </c:forEach>     <br/>      <!-- 3. 遍历Map -->      <%         Map map = new HashMap();         map.put("name", "Jack");         map.put("age", "25");         map.put("pwd", "1234");         pageContext.setAttribute("map", map);         //Entry en = null; en.getKey(); en.getValue();       %>       <c:forEach items="${map}" var="en">          ${en}<br/>       </c:forEach>       <c:forEach items="${map}" var="en">          ${en.key} : ${en.value } <br/>       </c:forEach>       <!-- 4. 遍历 集合中的元素是值对象的情况  -->       <%          List<User> list2 = new ArrayList<User>();          list2.add( new User("Jack",22,"1234") );          list2.add( new User("张三",20,"1111") );          list2.add( new User("Rose",23,"1222") );          list2.add( new User("李四",30,"0000") );          pageContext.setAttribute("list2", list2);        %>        <!-- varStatus属性代表的是一个封装了index和count两个成员变量的对象,                             前者是从0开始的索引下标,后者是从1开始的计数器 -->       <c:forEach items="${list2}" var="user" varStatus="idx">           ${idx.index},${idx.count}: &nbsp;           <c:out value="${user.name}"></c:out>,           <c:out value="${user.age}"></c:out>,           <c:out value="${user.pwd}"></c:out><br/>       </c:forEach>

这里写图片描述

应用:用JSTL+EL表达式 实现表格行背景间隔显示

<html><head>    <style type="text/css">       table{          width:300px;          border: 1px solid red;          border-collapse: collapse;       }       td,th{          border: 1px solid red;       }       .bk{          background: yellow;       }    </style></head><body>    <h3> 用JSTL+EL表达式 实现表格行背景间隔显示</h3>    <%        List<User> list = new ArrayList<User>();        list.add(new User("Jack", 22, "1234"));        list.add(new User("张三", 20, "1111"));        list.add(new User("Rose", 23, "1222"));        list.add(new User("李四", 30, "0000"));        list.add(new User("李四1", 30, "0000"));        list.add(new User("李四2", 30, "0000"));        list.add(new User("李四3", 30, "0000"));        request.setAttribute("list", list);    %>    <table>       <tr> <th>姓名</th> <th>年龄</th></tr>       <c:forEach items="${list}" var="user" varStatus="idx">           <c:if test="${idx.count%2==0}">              <tr class="bk">           </c:if>           <c:if test="${idx.count%2==1}">              <tr>           </c:if>              <td>${user.name}</td>  <td>${user.age}</td>           </tr>       </c:forEach>    </table>    <hr/>    <table>       <tr> <th>姓名</th> <th>年龄</th></tr>       <c:forEach items="${list}" var="user" varStatus="idx">           <c:if test="${idx.count%2==0}" var="boo">              <tr class="bk">           </c:if>           <c:if test="${!boo}">              <tr>           </c:if>              <td>${user.name}</td>  <td>${user.age}</td>           </tr>       </c:forEach>    </table></body></html>

这里写图片描述

我再JSP页面对着JSTL函数的源码试了一些方法,代码如下

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>>JSTL标签库技术学习</title>  </head>  <body>            <h3>JSTL标签库技术学习</h3>    <%        request.setAttribute("name", "aahnc     uanha a");    %>    ${fn:toUpperCase(name) }    ${fn:toLowerCase(name) }    ${fn:indexOf(name,"Hncu") } <%-- 后面的字符在前面不存在就返回-1,存在就返回最开始的位子 例子 0 --%>    ${fn:contains(name,"Hncu") }    ${fn:containsIgnoreCase(name,"hncu") }    ${fn:startsWith(name,"aa") }    ${fn:endsWith(name,"aa") }    ${fn:substring(name,0,2)}          ${fn:substringAfter(name,"h") } <%-- 返回值为 第一个h 后面的  --%>    ${fn:substringBefore(name,"n") } <%-- 返回值为 第一个h 前面的  --%>    ${fn:trim("a b") } <%--   不管用 什么鬼?                            public static String trim(String input) {                                if (input == null) return "";                                return input.trim();                              }                        --%>    <hr>    hulonghncu<br/>    ${fn:replace("hulonghncu","n","XX") }    <hr>  </body></html>

测试结果
这里写图片描述
jstl函数的源码

package org.apache.taglibs.standard.functions;import java.lang.reflect.Array;import java.util.Collection;import java.util.Enumeration;import java.util.Iterator;import java.util.Map;import java.util.StringTokenizer;import javax.servlet.jsp.JspTagException;import org.apache.taglibs.standard.resources.Resources;import org.apache.taglibs.standard.tag.common.core.Util;public class Functions{  public static String toUpperCase(String input)  {    return input.toUpperCase();  }  public static String toLowerCase(String input)  {    return input.toLowerCase();  }  public static int indexOf(String input, String substring)  {    if (input == null) input = "";    if (substring == null) substring = "";    return input.indexOf(substring);  }  public static boolean contains(String input, String substring) {    return (indexOf(input, substring) != -1);  }  public static boolean containsIgnoreCase(String input, String substring) {    if (input == null) input = "";    if (substring == null) substring = "";    String inputUC = input.toUpperCase();    String substringUC = substring.toUpperCase();    return (indexOf(inputUC, substringUC) != -1);  }  public static boolean startsWith(String input, String substring) {    if (input == null) input = "";    if (substring == null) substring = "";    return input.startsWith(substring);  }  public static boolean endsWith(String input, String substring) {    if (input == null) input = "";    if (substring == null) substring = "";    int index = input.indexOf(substring);    if (index == -1) return false;    if ((index == 0) && (substring.length() == 0)) return true;    return (index == input.length() - substring.length());  }  public static String substring(String input, int beginIndex, int endIndex) {    if (input == null) input = "";    if (beginIndex >= input.length()) return "";    if (beginIndex < 0) beginIndex = 0;    if ((endIndex < 0) || (endIndex > input.length())) endIndex = input.length();    if (endIndex < beginIndex) return "";    return input.substring(beginIndex, endIndex);  }  public static String substringAfter(String input, String substring) {    if (input == null) input = "";    if (input.length() == 0) return "";    if (substring == null) substring = "";    if (substring.length() == 0) return input;    int index = input.indexOf(substring);    if (index == -1) {      return "";    }    return input.substring(index + substring.length());  }  public static String substringBefore(String input, String substring)  {    if (input == null) input = "";    if (input.length() == 0) return "";    if (substring == null) substring = "";    if (substring.length() == 0) return "";    int index = input.indexOf(substring);    if (index == -1) {      return "";    }    return input.substring(0, index);  }  public static String escapeXml(String input)  {    if (input == null) return "";    return Util.escapeXml(input);  }  public static String trim(String input) {    if (input == null) return "";    return input.trim();  }  public static String replace(String input, String substringBefore, String substringAfter)  {    if (input == null) input = "";    if (input.length() == 0) return "";    if (substringBefore == null) substringBefore = "";    if (substringBefore.length() == 0) return input;    StringBuffer buf = new StringBuffer(input.length());    int startIndex = 0;    while ((index = input.indexOf(substringBefore, startIndex)) != -1)    {      int index;      buf.append(input.substring(startIndex, index)).append(substringAfter);      startIndex = index + substringBefore.length();    }    return input.substring(startIndex);  }  public static String[] split(String input, String delimiters)  {    if (input == null) input = "";    if (input.length() == 0) {      array = new String[1];      array[0] = "";      return array;    }    if (delimiters == null) delimiters = "";    StringTokenizer tok = new StringTokenizer(input, delimiters);    int count = tok.countTokens();    String[] array = new String[count];    int i = 0;    while (tok.hasMoreTokens()) {      array[(i++)] = tok.nextToken();    }    return array;  }  public static int length(Object obj)    throws JspTagException  {    if (obj == null) return 0;    if (obj instanceof String) return ((String)obj).length();    if (obj instanceof Collection) return ((Collection)obj).size();    if (obj instanceof Map) return ((Map)obj).size();    int count = 0;    if (obj instanceof Iterator) {      Iterator iter = (Iterator)obj;      count = 0;      while (iter.hasNext()) {        ++count;        iter.next();      }      return count;    }    if (obj instanceof Enumeration) {      Enumeration enum_ = (Enumeration)obj;      count = 0;      while (enum_.hasMoreElements()) {        ++count;        enum_.nextElement();      }      return count;    }    try {      count = Array.getLength(obj);      return count;    } catch (IllegalArgumentException ex) {      throw new JspTagException(Resources.getMessage("FOREACH_BAD_ITEMS")); }  }  public static String join(String[] array, String separator) {    if (array == null) return "";    if (separator == null) separator = "";    StringBuffer buf = new StringBuffer();    for (int i = 0; i < array.length; ++i) {      buf.append(array[i]);      if (i >= array.length - 1) continue; buf.append(separator);    }    return buf.toString();  }}
原创粉丝点击