17.5JSTL常用函数

一、EL函数库介绍

由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。
这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的EL函数库,需要导入JSTL开发包,并在页面中导入EL函数库

JSTL函数库

fn.tld就是EL函数库的对应的tld描述文件,如下图所示:

fn.tld

二、EL函数使用范例

fn.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.critc.model.User"%>
<%--引入EL函数库 --%>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE HTML>
<html>
  <head>
    <title>EL函数库中的方法使用范例</title>
  </head>
  
  <body>
  <h3>fn:toLowerCase函数使用范例:</h3>
      <%--fn:toLowerCase函数将一个字符串中包含的所有字符转换为小写形式,并返回转换后的字符串,
      它接收一个字符串类型的参数。fn:toLowerCase("")的返回值为空字符串--%>
      <%--fn:toLowerCase("Www.CNBLOGS.COM") 的返回值为字符串“www.cnblogs.com” --%>
      fn:toLowerCase("Www.CNBLOGS.COM")的结果是:${fn:toLowerCase("Www.CNBLOGS.COM")}
      <hr/>
      <h3>fn:toUpperCase函数使用范例:</h3>
      <%--fn:toUpperCase函数将一个字符串中包含的所有字符转换为大写形式,并返回转换后的字符串,
      它接收一个字符串类型的参数。fn:toUpperCase("")的返回值为空字符串--%>
      fn:toUpperCase("cnblogs.com")的结果是:${fn:toUpperCase("cnblogs.com")}
      <hr/>
      <h3>fn:trim函数使用范例:</h3>
      <%--fn:trim函数删除一个字符串的首尾的空格,并返回删除空格后的结果字符串,
      它接收一个字符串类型的参数。需要注意的是,fn:trim函数不能删除字符串中间位置的空格。--%>
      fn:trim("  cnblogs.com  ")的结果是:${fn:trim("  cnblogs.com  ")}
      <hr/>
      <h3>fn:length函数使用范例:</h3>
      <%--fn:length函数返回一个集合或数组大小,或返回一个字符串中包含的字符的个数,返回值为int类型。
      fn:length函数接收一个参数,这个参数可以是<c:forEach>标签的items属性支持的任何类型,
      包括任意类型的数组、java.util.Collection、java.util.Iterator、java.util.Enumeration、
      java.util.Map等类的实例对象和字符串。
      如果fn:length函数的参数为null或者是元素个数为0的集合或数组对象,则函数返回0;如果参数是空字符串,则函数返回0
      --%>
       <% 
        List<String> list = Arrays.asList("1","2","3");
        request.setAttribute("list",list);
    %>
    fn:length(list)计算集合list的size的值是:${fn:length(list)}
    <br/>
      fn:length("cnblogs.com")计算字符串的长度是:${fn:length("cnblogs.com")}
      <hr/>
      <h3>fn:split函数使用范例:</h3>
      <%--
      fn:split函数以指定字符串作为分隔符,将一个字符串分割成字符串数组并返回这个字符串数组。
    fn:split函数接收两个字符串类型的参数,第一个参数表示要分割的字符串,第二个参数表示作为分隔符的字符串
      --%>
      fn:split("cnblogs.com",".")[0]的结果是:${fn:split("cnblogs.com",".")[0]}
      <hr/>
      <h3>fn:join函数使用范例:</h3>
      <%--
      fn:join函数以一个字符串作为分隔符,将一个字符串数组中的所有元素合并为一个字符串并返回合并后的结果字符串。
      fn:join函数接收两个参数,第一个参数是要操作的字符串数组,第二个参数是作为分隔符的字符串。
    如果fn:join函数的第二个参数是空字符串,则fn:join函数的返回值直接将元素连接起来。
      --%>
      <%
          String[] StringArray = {"www","iteye","com"};
          pageContext.setAttribute("StringArray", StringArray);
      %>
      <%--fn:join(StringArray,".")返回字符串“www.iteye.com”--%>
      fn:join(StringArray,".")的结果是:${fn:join(StringArray,".")}
      <br/>
      <%--fn:join(fn:split("www,iteye,com",","),".")的返回值为字符串“www.iteye.com”--%>
      fn:join(fn:split("www,iteye,com",","),".")的结果是:${fn:join(fn:split("www,iteye,com",","),".")}
      <hr/>
      
      <h3>fn:indexOf函数使用范例:</h3>
      <%--
      fn:indexOf函数返回指定字符串在一个字符串中第一次出现的索引值,返回值为int类型。
      fn:indexOf函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,
      那么,不管第二个参数字符串在第一个参数字符串中出现几次,fn:indexOf函数总是返回第一次出现的索引值;
      如果第一个参数中不包含第二个参数,则fn:indexOf函数返回-1。如果第二个参数为空字符串,则fn:indexOf函数总是返回0。
      --%>
      fn:indexOf("www.iteye.com","eye")的返回值为:${fn:indexOf("www.iteye.com","eye")}
      <hr/>
      
      <h3>fn:contains函数使用范例:</h3>
      <%--
      fn:contains函数检测一个字符串中是否包含指定的字符串,返回值为布尔类型。
      fn:contains函数在比较两个字符串是否相等时是大小写敏感的。
    fn:contains函数接收两个字符串类型的参数,如果第一个参数字符串中包含第二个参数字符串,则fn:contains函数返回true,否则返回false。
    如果第二个参数的值为空字符串,则fn:contains函数总是返回true。
    实际上,fn:contains(string, substring)等价于fn:indexOf(string, substring) != -1
    忽略大小的EL函数:fn:containsIgnoreCase
      --%>
        <% 
        User user = new User();
        String likes[] = {"sing","dance"};
        user.setLikes(likes);
        //数据回显
        request.setAttribute("user",user);
    %>
    <%--使用el函数回显数据 --%>
   <input type="checkbox" name="like" 
               vlaue="sing" ${fn:contains(fn:join(user.likes,","),"sing")?'checked':''}/>唱歌
   <input type="checkbox" name="like" 
               value="dance"  ${fn:contains(fn:join(user.likes,","),"dance")?'checked':''}/>跳舞
   <input type="checkbox" name="like" 
               value="basketball" ${fn:contains(fn:join(user.likes,","),"basketball")?'checked':''}/>蓝球
   <input type="checkbox" name="like" 
               value="football"  ${fn:contains(fn:join(user.likes,","),"football")?'checked':''}/>足球
      <hr/>
      
      <h3>fn:startsWith函数和fn:endsWith函数使用范例:</h3>
      <%--
      fn:startsWith函数用于检测一个字符串是否是以指定字符串开始的,返回值为布尔类型。
    fn:startsWith函数接收两个字符串类型的参数,如果第一个参数字符串以第二个参数字符串开始,则函数返回true,否则函数返回false。
    如果第二个参数为空字符串,则fn:startsWith函数总是返回true。
    与fn:startsWith函数对应的另一个EL函数为:fn:endsWith,用于检测一个字符串是否是以指定字符串结束的,返回值为布尔类型。
      --%>
      fn:startsWith("www.iteye.com","iteye")的返回值为:${fn:startsWith("www.iteye.com","iteye")}
      <br/>
      fn:endsWith("www.iteye.com","com")的返回值为:${fn:endsWith("www.iteye.com","com")}
      <hr/>
      
      <h3>fn:replace使用范例:</h3>
      <%--
      fn:replace函数将一个字符串中包含的指定子字符串替换为其它的指定字符串,并返回替换后的结果字符串。
      fn:replace方法接收三个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示源字符串中要被替换的子字符串,
      第三个参数表示要被替换成的字符串。
      --%>
      fn:replace("www   iteye   com   ", " ", ".")的返回值为字符串:${fn:replace("www iteye com", " ", ".")}
      <hr/>
      
      <h3>fn:substring使用范例:</h3>
      <%--
      fn:substring函数用于截取一个字符串的子字符串并返回截取到的子字符串。
      fn:substring函数接收三个参数,第一个参数是用于指定要操作的源字符串,第二个参数是用于指定截取子字符串开始的索引值,
      第三个参数是用于指定截取子字符串结束的索引值,第二个参数和第三个参数都是int类型,其值都从0开始。
      --%>
      fn:substring("www.it315.org", 4, 9) 的返回值为字符串:${fn:substring("www.it315.org", 4, 9)}
      
      <h3>fn:substringAfter函数和fn:substringBefore函数使用范例:</h3>
      <%--
      fn:substringAfter函数用于截取并返回一个字符串中的指定子字符串第一次出现之后的子字符串。
      fn:substringAfter函数接收两个字符串类型的参数,第一个参数表示要操作的源字符串,第二个参数表示指定的子字符串
      与之对应的EL函数为:fn:substringBefore 
      --%>
      fn:substringAfter("www.it315.org",".")的返回值为字符串:${fn:substringAfter("www.it315.org",".")}
      <br/>
      fn:substringBefore("www.it315.org",".")的返回值为字符串:${fn:substringBefore("www.it315.org",".")}
      <hr/>
  </body>
</html>

fn函数在实际开发中用的比较多,比如格式化日期、格式化字符串等等,碰到jstl解决不了的,可以想象fn能不能搞定

源码下载

本例子详细源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容