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(默认)时,会把"<"编码成"<"输出,若设为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}:欢迎光临 </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} </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}: <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(); }}
阅读全文
0 0
- JSTL标签库技术学习
- JSTL标签库学习
- JSTL标签库学习
- JSTL标签库学习总结
- JSTL标签库学习总结
- JSTL标签库学习总结
- JSTL标签库学习笔记
- JSTL标签库学习总结
- 转载 JSTL标签库学习
- JSTL标签库学习总结
- JSTL标签库简单学习
- JSTL标签库学习总结
- JSTL标签库学习笔记
- JSTL---JSP标准标签库技术
- 【JSTL】JSTL 标签库
- 学习笔记-JSTL标签库--C SQL
- JSTL学习(二)自定义标签库
- JSTL标签库学习笔记 一、概述
- el表达式:获得web开发常用对象
- web自动化测试第5步:浏览器/页面信息的获取
- F
- java基础知识0719
- Echarts折线图模板
- JSTL标签库技术学习
- 1014. 福尔摩斯的约会 (20)
- USB中CDC-ECM的了解和配置
- hihoCoder #1148 : 2月29日 题解
- 跟我一起学数据结构(第一天)
- Kafka入门介绍(一)
- Systemd 入门教程:命令篇
- Linux中link,unlink,close,fclose详解
- [LeetCode]493. Reverse Pairs 深入浅出算法讲解和代码示例