JSTL 除C标签外的其余几个标签

JSTL 除C标签外的其他几个标签

9.7 Functions标签库

称呼Functions标签库为标签库,倒不如称呼其为函数库来得更容易理解些。因为Functions标签库并没有提供传统的标签来为JSP页面的工作服务,而是被用于EL表达式语句中。在JSP2.0规范下出现的Functions标签库为EL表达式语句提供了许多更为有用的功能。Functions标签库分为两大类,共16个函数。

q    长度函数:fn:length

q    字符串处理函数:fn:containsfn:containsIgnoreCasefn:endsWithfn:escapeXmlfn:indexOffn:joinfn:replacefn:splitfn:startsWithfn:substringfn:substringAfterfn:substringBeforefn:toLowerCasefn:toUpperCasefn:trim

以下是各个函数的用途和属性以及简单示例。

9.7.1 长度函数fn:length函数

长度函数fn:length的出现有重要的意义。在JSTL1.0中,有一个功能被忽略了,那就是对集合的长度取值。虽然java.util.Collection接口定义了size方法,但是该方法不是一个标准的JavaBean属性方法(没有get,set方法),因此,无法通过EL表达式“${collection.size} ”来轻松取得。

fn:length函数正是为了解决这个问题而被设计出来的。它的参数为input,将计算通过该属性传入的对象长度。该对象应该为集合类型或String类型。其返回结果是一个int类型的值。下面看一个示例。

<%ArrayList arrayList1 = new ArrayList();

              arrayList1.add("aa");

              arrayList1.add("bb");

              arrayList1.add("cc");

%>

<%request.getSession().setAttribute("arrayList1",arrayList1);%>

${fn:length(sessionScope.arrayList1)}

假设一个ArrayList类型的实例“arrayList1 ”,并为其添加三个字符串对象,使用fn:length函数后就可以取得返回结果为“3 ”

9.7.2 判断函数fn:contains函数

fn:contains函数用来判断源字符串是否包含子字符串。它包括stringsubstring两个参数,它们都是String类型,分布表示源字符串和子字符串。其返回结果为一个boolean类型的值。下面看一个示例。

${fn:contains("ABC", "a")}<br>

${fn:contains("ABC", "A")}<br>

前者返回“false ”,后者返回“true ”

9.7.3 fn:containsIgnoreCase函数

fn:containsIgnoreCase函数与fn:contains函数的功能差不多,唯一的区别是fn:containsIgnoreCase函数对于子字符串的包含比较将忽略大小写。它与fn:contains函数相同,包括stringsubstring两个参数,并返回一个boolean类型的值。下面看一个示例。

${fn:containsIgnoreCase("ABC","a")}<br>

${fn:containsIgnoreCase("ABC","A")}<br>

前者和后者都会返回“true ”

9.7.4 词头判断函数fn:startsWith函数

fn:startsWith函数用来判断源字符串是否符合一连串的特定词头。它除了包含一个string参数外,还包含一个subffx参数,表示词头字符串,同样是String类型。该函数返回一个boolean类型的值。下面看一个示例。

${fn:startsWith ("ABC", "ab")}<br>

${fn:startsWith ("ABC", "AB")}<br>

前者返回“false ”,后者返回“true ”

9.7.5 词尾判断函数fn:endsWith函数

fn:endsWith函数用来判断源字符串是否符合一连串的特定词尾。它与fn:startsWith函数相同,包括stringsubffx两个参数,并返回一个boolean类型的值。下面看一个示例。

${fn:endsWith("ABC", "bc")}<br>

${fn:endsWith("ABC", "BC")}<br>

前者返回“false ”,后者返回“true ”

9.7.6 字符实体转换函数fn:escapeXml函数

fn:escapeXml函数用于将所有特殊字符转化为字符实体码。它只包含一个string参数,返回一个String类型的值。

9.7.8 字符匹配函数fn:indexOf函数

fn:indexOf函数用于取得子字符串与源字符串匹配的开始位置,若子字符串与源字符串中的内容没有匹配成功将返回“-1 ”。它包括stringsubstring两个参数,返回结果为int类型。下面看一个示例。

${fn:indexOf("ABCD","aBC")}<br>

${fn:indexOf("ABCD","BC")}<br>

前者由于没有匹配成功,所以返回-1,后者匹配成功将返回位置的下标,为1

9.7.9 分隔符函数fn:join函数

fn:join函数允许为一个字符串数组中的每一个字符串加上分隔符,并连接起来。它的参数、返回结果和描述如表9.25所示:

9.25 fn:join函数

参数

描述

array

字符串数组。其类型必须为String[]类型

separator

分隔符。其类型必须为String类型

返回结果

返回一个String类型的值

下面看一个示例。

<% String[] stringArray ={"a","b","c"}; %>

<%request.getSession().setAttribute("stringArray",stringArray);%>

${fn:join(sessionScope.stringArray,"")}<br>

定义数组并放置到Session中,然后通过Session得到该字符串数组,使用fn:join函数并传入分隔符“; ”,得到的结果为“a;b;c ”

9.7.10 替换函数fn:replace函数

fn:replace函数允许为源字符串做替换的工作。它的参数、返回结果和描述如表9.26所示:

9.26 fn:replace函数

参数

描述

inputString

源字符串。其类型必须为String类型

beforeSubstring

指定被替换字符串。其类型必须为String类型

afterSubstring

指定替换字符串。其类型必须为String类型

返回结果

返回一个String类型的值

下面看一个示例。

${fn:replace("ABC","A","B")}<br>

“ABC ”字符串替换为“BBC ”,在“ABC ”字符串中用“B ”替换了“A ”

9.7.11 分隔符转换数组函数fn:split函数

fn:split函数用于将一组由分隔符分隔的字符串转换成字符串数组。它的参数、返回结果和描述如表9.27所示:

9.27 fn:split函数

参数

描述

string

源字符串。其类型必须为String类型

delimiters

指定分隔符。其类型必须为String类型

返回结果

返回一个String[]类型的值

下面看一个示例。

${fn:split("A,B,C",",")}<br>

“A,B,C ”字符串转换为数组{A,B,C}

9.7.12 字符串截取函数fn:substring函数

fn:substring函数用于截取字符串。它的参数、返回结果和描述如表9.28所示:

9.28 fn:substring函数

参数

描述

string

源字符串。其类型必须为String类型

beginIndex

指定起始下标(值从0开始)。其类型必须为int类型

endIndex

指定结束下标(值从0开始)。其类型必须为int类型

返回结果

返回一个String类型的值

下面看一个示例。

${fn:substring("ABC","1","2")}<br>

截取结果为“B ”

 

9.7.14 起始到定位截取字符串函数fn:substringBefore函数

fn:substringBefore函数允许截取源字符从开始到某个字符串。它的参数和fn:substringAfter函数相同,不同的是substring表示的是结束字符串。下面看一个示例。

${fn:substringBefore("ABCD","BC")}<br>

截取的结果为“A ”

9.7.15 小写转换函数fn:toLowerCase函数

fn:toLowerCase函数允许将源字符串中的字符全部转换成小写字符。它只有一个表示源字符串的参数string,函数返回一个String类型的值。下面看一个示例。

${fn:toLowerCase("ABCD")}<br>

转换的结果为“abcd ”

9.7.16大写转换函数fn:toUpperCase函数

fn:toUpperCase函数允许将源字符串中的字符全部转换成大写字符。它与fn:toLowerCase函数相同,也只有一个String参数,并返回一个String类型的值。下面看一个示例。

${fn:toUpperCase("abcd")}<br>

转换的结果为“ABCD ”

9.7.17空格删除函数fn:trim函数

fn:trim函数将删除源字符串中结尾部分的空格以产生一个新的字符串。它与fn:toLowerCase函数相同,只有一个String参数,并返回一个String类型的值。下面看一个示例。

${fn:trim("AB C ")}D<br>

转换的结果为“AB CD ”,注意,它将只删除词尾的空格而不是全部,因此“B ”“C ”之间仍然留有一个空格。

 

9.4  JSTL XML processing标签库

在企业级应用越来越依赖XML的今天,XML格式的数据被作为信息交换的优先选择。XML processing标签库为程序设计者提供了基本的对XML格式文件的操作。在该标签库中的标签一共有10个,被分为了三类,分别是:

q    XML核心标签:<x:parse><x:out><x:set>

q    XML流控制标签:<x:if><x:choose><x:when><x:otherwise><x:forEach>

q    XML转换标签:<x:transform><x:param>

由于该组标签库专注于对某一特定领域的实现,因此本书将只选择其中常见的一些标签和属性进行介绍。

9.4.1 用于解析XML文件的<x:parse>标签

<x:parse>标签是该组标签库的核心,从其标签名就可以知道,它是作为解析XML文件而存在的。它的属性和描述如表9.12所示:

9.12 <x:parse>标签属性和说明

属性

描述

doc

XML的内容,该属性的内容应该为String类型或者java.io.Reader的实例,可以用xml属性来替代,但是不被推荐

var

将解析后的XML保存在该属性所指定的变量中,之后XML processing标签库中的其他标签若要取XML中的内容就可以从该变量中得到(可选)

scope

变量的作用范围(可选)

varDom

指定保存的变量为org.w3c.dom.Document接口类型(可选)

scopeDom

org.w3c.dom.Document的接口类型变量作用范围(可选)

systemId

定义一个URI,该URI将被使用到XML文件中以接入其他资源文件(可选)

filter

该属性必须为org.xml.sax.XMLFilter类的一个实例,可以使用EL表达式传入,将对XML文件做过滤得到自身需要的部分(可选)

其中,varscopevarDomscopeDom不应该同时出现,而应该被视为两个版本来使用,二者的变量都可以被XML processing标签库的其他标签来使用。

<x:parse>标签单独使用的情况很少,一般会结合XML processing标签库中的其他标签来一起工作。下面看一个示例。

首先给出一个简单的XML文件,将对该XML文件做解析,该XML文件名为SampleXml.xml

<?xml version="1.0"encoding="UTF-8"?>

<xml-body>

    <name>RW</name>

    <passWord>123456</passWord>

    <age>28</age>

    <books>

        <book>book1</book>

        <book>book2</book>

        <book>book3</book>

    </books>

</xml-body>

标签库的工作:

<c:import var="xmlFile"url="http://localhost:8080/booksamplejstl/SampleXml.xml"/>

<x:parse var="xmlFileValue"doc="${xmlFile}"/>

9.5  I18Nformatting标签库

看到I18N就应该想到知识国际化I18N formatting标签库就是用于在JSP页面中做国际化的动作。在该标签库中的标签一共有12个,被分为了两类,分别是:

q    国际化核心标签:<fmt:setLocale><fmt:bundle><fmt:setBundle><fmt:message><fmt:param><fmt:requestEncoding>

q    格式化标签:<fmt:timeZone><fmt:setTimeZone><fmt:formatNumber><fmt:parseNumber><fmt:formatDate><fmt:parseDate>

下面只选择其中常见的一些标签和属性进行介绍。

9.5.1 用于设置本地化环境的<fmt:setLocale>标签

<fmt:setLocale>标签用于设置Locale环境。它的属性和描述如表9.17所示:

9.17 <fmt:setLocale>标签属性和说明

属性

描述

value

MsoNo

文章评论

JSTL 除C标签外的其余几个标签
程序员周末都喜欢做什么?
JSTL 除C标签外的其余几个标签
鲜为人知的编程真相
JSTL 除C标签外的其余几个标签
编程语言是女人
JSTL 除C标签外的其余几个标签
为啥Android手机总会越用越慢?
JSTL 除C标签外的其余几个标签
程序员都该阅读的书
JSTL 除C标签外的其余几个标签
看13位CEO、创始人和高管如何提高工作效率
JSTL 除C标签外的其余几个标签
团队中“技术大拿”并非越多越好
JSTL 除C标签外的其余几个标签
程序猿的崛起——Growth Hacker
JSTL 除C标签外的其余几个标签
要嫁就嫁程序猿—钱多话少死的早
JSTL 除C标签外的其余几个标签
Web开发者需具备的8个好习惯
JSTL 除C标签外的其余几个标签
程序员最害怕的5件事 你中招了吗?
JSTL 除C标签外的其余几个标签
程序员和编码员之间的区别
JSTL 除C标签外的其余几个标签
为什么程序员都是夜猫子
JSTL 除C标签外的其余几个标签
总结2014中国互联网十大段子
JSTL 除C标签外的其余几个标签
“肮脏的”IT工作排行榜
JSTL 除C标签外的其余几个标签
60个开发者不容错过的免费资源库
JSTL 除C标签外的其余几个标签
“懒”出效率是程序员的美德
JSTL 除C标签外的其余几个标签
程序员的样子
JSTL 除C标签外的其余几个标签
如何成为一名黑客
JSTL 除C标签外的其余几个标签
十大编程算法助程序员走上高手之路
JSTL 除C标签外的其余几个标签
当下全球最炙手可热的八位少年创业者
JSTL 除C标签外的其余几个标签
Java程序员必看电影
JSTL 除C标签外的其余几个标签
漫画:程序员的工作
JSTL 除C标签外的其余几个标签
亲爱的项目经理,我恨你
JSTL 除C标签外的其余几个标签
Java 与 .NET 的平台发展之争
JSTL 除C标签外的其余几个标签
代码女神横空出世
JSTL 除C标签外的其余几个标签
10个帮程序员减压放松的网站
JSTL 除C标签外的其余几个标签
初级 vs 高级开发者 哪个性价比更高?
JSTL 除C标签外的其余几个标签
做程序猿的老婆应该注意的一些事情
JSTL 除C标签外的其余几个标签
程序员的鄙视链
JSTL 除C标签外的其余几个标签
Web开发人员为什么越来越懒了?
JSTL 除C标签外的其余几个标签
那些争议最大的编程观点
JSTL 除C标签外的其余几个标签
不懂技术不要对懂技术的人说这很容易实现
JSTL 除C标签外的其余几个标签
如何区分一个程序员是“老手“还是“新手“?
JSTL 除C标签外的其余几个标签
科技史上最臭名昭著的13大罪犯
JSTL 除C标签外的其余几个标签
我跳槽是因为他们的显示器更大
JSTL 除C标签外的其余几个标签
程序员的一天:一寸光阴一寸金
JSTL 除C标签外的其余几个标签
程序员应该关注的一些事儿
JSTL 除C标签外的其余几个标签
程序员必看的十大电影
JSTL 除C标签外的其余几个标签
10个调试和排错的小建议
JSTL 除C标签外的其余几个标签
我的丈夫是个程序员
JSTL 除C标签外的其余几个标签
中美印日四国程序员比较
JSTL 除C标签外的其余几个标签
我是如何打败拖延症的
JSTL 除C标签外的其余几个标签
什么才是优秀的用户界面设计
JSTL 除C标签外的其余几个标签
老美怎么看待阿里赴美上市
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有