`
uule
  • 浏览: 6315334 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

[转]JSTL

    博客分类:
  • JSTL
阅读更多

如何判断空:

<c:if test="${orderform.name !=null}">

<td align="center" width="20%">	
    <c:choose>											
	<c:when test="${ empty news.issueNo}"></c:when>
	<c:otherwise>												
	     <span style="font-size:15px">issue : ${news.issueNo }</span>
	</c:otherwise>
    </c:choose>
</td>	
<c:set var="log.logTitle" value="做一个截取字符串长度的测试"
<c:choose>
<c:when test="${fn:length(log.logTitle) > 10}">
     <c:out value="${fn:substring(log.logTitle, 0, 10)}" />
</c:when>
<c:otherwise>
     <c:out value="${log.logTitle}" />
</c:otherwise>
</c:choose>

 

<body>
    <%
    	Set hashSet = new java.util.HashSet();
 		hashSet.add(1111);
 		hashSet.add(222); 
 		request.getSession().setAttribute("set",hashSet);
    %>
    <script>
    	alert(${fn:length(sessionScope.set)});
    </script>
  </body>

 

jsp拼装:


 


 

ForEach:

 

${status.index}      输出行号,从0开始。
${status.count}      输出行号,从1开始。
${status.current}   当前这次迭代的(集合中的)项
${status.first}  判断当前项是否为集合中的第一项,返回值为true或false
${status.last}   判断当前项是否为集合中的最后一项,返回值为true或false
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。
 
如:<c:forEach begin='1' end='5' step='2' items='${list}' var='item'>
表示:操作list集合汇中1~5条数据,不是逐条循环,而是按每2个取值。即操作集合中的第1、3、5条数据。
下面是我从网上找的图,觉得挺好,收藏了:

 

<c:forEach items="${item.exchangerateScheduleList}" var="schedule" varStatus="status">
   <b:Call type="com.techson.util.DateUtil" method="dateToStr" var="scheduleDate">
		<b:Param paramclass="java.util.Date" value="${schedule.scheduleDate}"/>
		<b:Param paramclass="java.lang.String" value="@dd@-@MMM@-@yyyy@"/>
	</b:Call>
   <a href="javascript:void(0)" onclick="doEdit('${schedule.internalid}')">${scheduleDate}</a>
   <c:if test="${!status.last}">,</c:if>
</c:forEach>

 注意后面那个逗号的巧妙设置。

 

 

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

 长度函数:fn:length

 字符串处理函数:fn:contains、fn:containsIgnoreCase、fn:endsWith、fn:escapeXml、 fn:indexOf、fn:join、fn:replace、fn:split、fn:startsWith、fn:substring、 fn:substringAfter、fn:substringBefore、fn:toLowerCase、fn:toUpperCase、 fn: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函数用来判断源字符串是否包含子字符串。它包括string和substring两个参数,它们都是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函数相同,包括string和substring两个参数,并返回一个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函数相同,包括string和subffx两个参数,并返回一个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”。它包括string和substring两个参数,返回结果为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”。

 

JSTL1.1函数标签库(functions)如fn:length

 

 

具体使用方法请参见下表:

 

函数

描述

fn:contains(string, substring)

如果参数string中包含参数substring,返回true

fn:containsIgnoreCase(string, substring)

如果参数string中包含参数substring(忽略大小写),返回true

fn:endsWith(string, suffix)

如果参数 string 以参数suffix结尾,返回true

fn:escapeXml(string)

将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回

fn:indexOf(string, substring)

返回参数substring在参数string中第一次出现的位置

fn:join(array, separator)

将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

fn:length(item)

返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。

fn:replace(string, before, after)

返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果

fn:split(string, separator)

返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素

fn:startsWith(string, prefix)

如果参数string以参数prefix

开头,返回true

fn:substring(string, begin, end)

返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符

fn:substringAfter(string, substring)

返回参数substring在参数string中后面的那一部分字符串

fn:substringBefore(string, substring)

返回参数substring在参数string中前面的那一部分字符串

fn:toLowerCase(string)

将参数string所有的字符变为小写,并将其返回

fn:toUpperCase(string)

将参数string所有的字符变为大写,并将其返回

fn:trim(string)

去除参数string 首尾的空格,并将其返回

 

 

JSTL与EL表达式(为空判断)

一、循环遍历集合

1、在jsp中引入标准函数声明
<%@ taglib uri="http://java.sun.com/jsp/jstl/core " pre fix="c"%> 

2、若要判断集合的大小,则需要引入如下声明
<%@ taglib pre fix="fn" uri="http://java.sun.com/jsp/jstl/functions " %>

3、如何使用jstl判断集合是否为空
${use r}为集合,use r为集合名
<c:if te st="${emp ty use r}">无信息!</c:if>为空
<c:if te st="${!emp ty use r}">其它</c:if>非空

4、如何取得集合的大小
${fn:le ngth(集合名<如果是se ssion中的集合则应该加上se ssionScope .键>)}
${fn:le ngth(map)}

5、如何取得保存在se ssion中的对象?
${se ssionScope .键.对象属性}

6、varStatus显示循环变量的状态
例:<tag:forE ach var="curre ntFood" item s="${se ssionScope .foods}" varStatus="status"
<tag:if te st="${status%2==1}">
.....................
</tag:if>
</tag:forE ach>
其中status这个变量就记录了循环变量的状态

7、如何遍历Map集合
<c:forE ach var="foodmap" item s="${se ssionScope .cart}" varStatus="status">
<c:se t var="subtotal" value ="${foodmap.value .be an.foodPrice *foodmap.value .quantity}"></c:se t>
</c:forE ach>
遍历Map集合的值:
foodmap:保存se ssion中的map
foodmap.value :取得map的值,即获取保存在map中的一个对象
要获取对象中的数据,必须用foodmap.value .quantity去点对象的属性(quantity就是对象的属性)
 
 
项目中代码:
<td style="text-align: center;word-wrap:break-word;overflow:hidden;width: 140px;">
<c:if test="${fareCondition.tripType eq '1'}">	
	<c:set var="des" value="${fareCondition.transPoint}"></c:set>
	<c:choose>
		<c:when test="${fn:contains(des,'[')}">
			<c:choose>
				<c:when test="${fn:contains(des,':')}">
					<c:set var="desArr" value="${fn:split(des,':')}"></c:set>	
					<c:set var="desCity" value=""></c:set>	
					<c:forEach items="${desArr}" var="detail">
						 <c:set var="item" value="${fn:split(detail,'[|]')[1]}"></c:set>	
						 <c:if test="${fn:contains(item,',')}"  >
							<c:forEach items="${fn:split(item,',')}" var="dt">
								<c:if test="${!fn:contains(desCity,dt)}">																	 		
									<c:set var="desCity" value="${desCity},${dt}"></c:set>	
								</c:if>
							</c:forEach>
						 </c:if>
						 <c:if test="${!fn:contains(item,',')}"  >
							<c:if test="${!fn:contains(desCity,item)}">
								<c:set var="desCity" value="${desCity},${item}"></c:set>	
							</c:if>														 	
						 </c:if>
					</c:forEach>
				
					<c:set var="destination" value="${fn:substring(desCity,'1',fn:length(desCity))}"></c:set>		
				</c:when>
				<c:otherwise>
					<c:set var="destination" value="${fn:split(des,'[|]')[1]}"></c:set>		
				</c:otherwise>
			</c:choose>																								
		</c:when>
		<c:otherwise>
			<c:set var="destination" value="${des}"></c:set>
		</c:otherwise>
	</c:choose>	
</c:if>
<c:if test="${fareCondition.tripType eq '0'}">
	<c:set var="destination" value="${fareCondition.endPoint}"></c:set>
</c:if>
<script>
	var s="${destination}";
	s=s.replace(/(.{1,20})(?=\s|\b|$)/g,"$1\r\n");												
	document.write(s);
</script>
</td>
 
 数值TransPoint:
104[ABL,LON]:100[ABI,ABG,LON,DYS,LHR]:102[ABI]
或104[ABL,LON]
或WCC,AEA
一、循环遍历集合
1、在jsp中引入标准函数声明
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

2、若要判断集合的大小,则需要引入如下声明
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

3、如何使用jstl判断集合是否为空
${user}为集合,user为集合名
<c:if test="${empty user}">无信息!</c:if>为空
<c:if test="${!empty user}">其它</c:if>非空

4、如何取得集合的大小
${fn:length(集合名<如果是session中的集合则应该加上sessionScope.键>)}
${fn:length(map)}

5、如何取得保存在session中的对象?
${sessionScope.键.对象属性}

6、varStatus显示循环变量的状态
例:<tag:forEach var="currentFood" items="${sessionScope.foods}" varStatus="status"
<tag:if test="${status%2==1}">
.....................
</tag:if>
</tag:forEach>
其中status这个变量就记录了循环变量的状态

7、如何遍历Map集合
<c:forEach var="foodmap" items="${sessionScope.cart}" varStatus="status">
<c:set var="subtotal" value="${foodmap.value.bean.foodPrice*foodmap.value.quantity}"></c:set>
</c:forEach>
遍历Map集合的值:
foodmap:保存session中的map
foodmap.value:取得map的值,即获取保存在map中的一个对象
要获取对象中的数据,必须用foodmap.value.quantity去点对象的属性(quantity就是对象的属性)

8、对象属性为空显示默认值
<c:forEach var="customer" items="${customers}">
    <tr>
      <td><c:out value="${customer.lastName}"/></td>
      <td><c:out value="${customer.phoneHome}" default="no home phone specified"/></td>
      <td>
        <c:out value="${customer.phoneCell}" escapeXml="false">
          <font color="red">no cell phone specified</font>
        </c:out>
      </td>
    </tr>
</c:forEach>
 
 
 
  • 大小: 1.2 KB
  • 大小: 30.9 KB
分享到:
评论

相关推荐

    JSP开发技术jstl标签的使用

    玩转jstl标签让你更轻松的开发JSP 快来下载吧,各位同僚

    jstl 自定义标签

    jstl 自定义标签 int转换为时间格式

    JSTL 教程(繁体字版本)

    这是一个由台湾人写的关于JSTL的教程,教程中使用的是繁体中文,相信大家都能看的懂。

    使用JSTL所需要的jar包

    ========== 以上两条转自 http://blog.csdn.net/lzz313/article/details/7554736 =========== 3、手动将 jstl-1.2.jar 添加到项目 /WEB-INF/lib 中 4、手动将 jstl-1.2.jar 添加到 apache-tomcat-6.0.35\lib 中

    jstl标签基础+例子

    JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记,如 jsp:include 之外,定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。一旦您创建了定制标记库 ( 简称 taglib) ,当您扩展...

    JSTL详细标签库介绍

    &lt;!...&lt;HTML&gt;&lt;HEAD&gt;关于java异常处理(讲义)--JSP中文网 ;...关于java异常处理(讲义),JSP中文网&gt; 关于java异常处理(讲义)&gt; ...&lt;META name=GENERATOR content="MSHTML 8.00.7600.16535"&gt;&lt;/HEAD&gt; ...以下这些情况都可以引发...

    JSTL与EL表达式

    JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,E L(Expression Language) 目的:为了使JSP写起来更加简单。

    自定义标签,jstl应用

    JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。 JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记,如 jsp:include 之外,定制标记库...

    Web开发——jstl标签真分页实战

    &lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt; 1.currPage 是存储在session中的当前页码 2.maxPage 是你计算出来的最大页码 3.servlet/ShowTopicServlet 这个Servlet是你的处理的servlet或者...

    JSTL - EL表达式详解

    EL 是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点。在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。 Web 服务器对于 request ...

    jstl基础入门

    1 jsp(java server page):是服务器端运行的JSP本身就是一个文档,不仅可以包含静态的HTML代码, 也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet发布,并接受请求......

    tomee-jstl-test:用于测试 JSTL 的 TomEE 项目

    用于测试 JSTL 的 TomEE 项目生成自: mvn archetype:generate \-DarchetypeGroupId=org.apache.openejb.maven \-DarchetypeArtifactId=tomee-webapp-archetype \-DarchetypeVersion=...run 然后转到: 测试 JSTL -&gt;

    基于servlet/jsp的学生信息录入查询系统

    适用初学者学习servlet/jsp框架, 了解DButils的api,页面转换,参数传递,jstl标签运用。包中含有sql脚本

    JSLT一种JSON的完整查询和转换语言类似于jqXPath和XQuery

    JSLT一种JSON的完整查询和转换语言,类似于jq,XPath和XQuery

    html转jsp工具

    &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt; 3、此工具能够自动更新页面的超链接为.jsp的文件路径 4、此工具只作为个人研究使用,不得用于商业用途 5、此工具不提供代码自动生成功能 6...

    el表达式,json转换和redis使用所需jar包

    el表达式,json转换和redis使用所需jar包含有gson-2.3.1.jar,jedis-2.9.0.jar和jstl-1.2.jar

    中文转拼音、实现跨数据库(mysql5前、后;oracle10、oracle10后及mssql相关jdbc需要需要的jar包

    pinyin4j-2.5.0实现中文转拼音 servlet-api.jar 有些tomcat报错需要引入 log4j-1.2.jar dom4j-1.6.1.jar jstl.jar log4j-1.2.14.jar pinyin4j-2.5.0.jar servlet-api.jar -----------------实现跨数据库(mysql5前...

    JSP定制标实例

    但由于JSP的标准操作、JSTL定义的标签满足不了用户的所有要求,所以在JSP2.0中允许用户可根据需要创建自己的标签库,即自定义标签库。 用户自定义标签和JSTL中的标签从技术上看没有任何区别,可以将这些标签统称为...

    将特殊字符转换为html代码

    将特殊字符转换为html代码,这代码根据JSTL中的代码进行了改写。

Global site tag (gtag.js) - Google Analytics