`
anson_xu
  • 浏览: 510673 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

jstl三列

    博客分类:
  • jstl
阅读更多
forEach 每行三列
<c:forEach var="vo" items="${result}" varStatus="status">
<c:if test="${status.count%3==1}">
<tr>
</c:if>
<td><b><cut value="${vo.emtno}"/></b>:<cut value="${vo.emtne}"/></td>
<c:if test="${status.count%3==0}">
</tr>
</c:if>
<c:set var ="v_count" value="${status.count}"/>
</c:forEach>
<c:if test="${v_count%3==1}">
<td></td>
<td></td>
</tr>
</c:if>
<c:if test="${v_count%3==2}">
<td></td>
</tr>
</c:if>

<logic:present name="list">
<logic:iterate id="build" name="list" scope="request" indexId="indexs">
<bean:define id="mm" value="${indexs%3}"/> 
<logic:equal value="0" name="mm">
<% out.print("</tr><tr>"); %>
</logic:equal>
<td>
<table border="0" align="center" cellspacing="0">
<tr>
<td>
<table width="226" border="0" cellspacing="0" bgcolor="D6C59E">
<tr>
<td colspan="2"><table width="208" border="0" cellspacing="0">
<tr>
<td height="194" align="center" valign="middle" bgcolor="#F7F7E8">
<logic:iterate id="pic" name="build" property="xpics" length="1">
<table background="../hotuploadphoto/bg_images_${pic.ptype}.jpg" border="0" cellspacing="0" width="194" height="180">
<tr>
<td height="22">
</td>
</tr>
<tr>
<td height="145" align="center">
<a href="hot_front.do?method=detail&type=${type}&id=${build.id }"><img name="sp2_r3_c4" src="../hotuploadphoto/m_${pic.savePath }" height="141" border="0" alt=""></a>
</td>
</tr>
<tr>
<td height="13">
</td>
</tr>  
</table>
</logic:iterate>




JSTL 学习、应用记录



原来一直没有看过,我说过我是新手,但是好多资料上似乎也不重视 JSTL 。我看项目源代码发现其中使用到了这个标签库,感觉其还真是方便,页面看起来更加清爽。减少了 JAVA 程序员亲自写的代码量,还真验证了,不懒不做程序员,程序员如果写代码不想着偷懒,那么生活是很无趣的。

下面总结总结,学习学习。:)

JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。

JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记,如 jsp:include 之外,定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。一旦您创建了定制标记库 ( 简称 taglib) ,当您扩展项目或转向另一个项目时您可以重复使用这些标记。您还可以将 taglib 传递给其它开发人员,从而他们可以在自己的网站上使用,或者在您 Web 应用程序的其它部分使用。

      

       JSTL 的目标是为了简化 JSP 页面的设计。对于页面设计人员来说,使用脚本语言(默认值是 JAVA 语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些, JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。

 

一. 配置 JSTL

 

包括两个 JAR 文件, jstl.jar 和 standard.jar 。是什么没有必要管,重在应用( 1+1 ? =2 ,我们没有必要深究,只需要知道这么用就行。)。

 

原文引入:

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

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

                                                                

二. Core 标签库

 

Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。在 JSP 页面使用 Core 标签,要使用 taglig 指令,指定引用的标签库,如下:

<%@ taglib rui=”http://java.sun.com/jsp/jstl/core”  prefix=”c” %>

 

一般用途的标签有 <c:out> 、 <c:set> 、 <c:remove> 、 <c:cath>

1.<c:out>

用于计算一个表达式并将结果输出。类似于 JSP 中 <%=%> 表达式,或者是 EL 中 $ ${el-expression} 。

 

2.<c:set>

用于设置范围变量的值或者 javabean 对象的属性。

看个实际例子:

<c:set var=”username” value=”lisi” scope=”session”/>

这样就相当于设置了 session 。

 

3.<c:remove>

相对 <c:set> 其作用是移除范围变量。比如: <c:remove var=”nusername” scope=”session”/>

 

4.<c:catch>

 

用于捕获在其中嵌套的操作所抛出的异常对象,并将异常信息保存到变量中。

我们将有可能抛出异常的代码放置到开始标签 :<c:catch> 和结束标签 :</c:catch> 之间。如果其中代码出现异常,异常对象将被捕获,保存在 var 声明的变量中,该变量总是有 page 范围。如果没有发生异常,而 var 所标识的范围变量将被移除。

如果没有指定 var 属性,异常只是简单的被捕获,异常信息并不会被保存。

Eg :

<c:catch var=”exception”>

<%

       int i = 5;

       int j = 0;

       int k=i/j;

%>

</c:catch>

<c:out value=”${exception}” /><br>

<c:out value=”${exception.massage}”/>

后一句相当于: exception.getMessage()

 

条件标签包括 <c:if><c:choose><c:when><c:otherwise>

1.<c:if>

用于实现 java 中的 if 语句功能。

 

<c:if test=”${user.visitCount==1}”>

       This is your first visit .

</c:if>

 

若为 true ,会打印中间部分。也可以声明 var ,方便下一步判断。

<c:if test=”${param.name==’admin’}” value=”result”/>

<c:out value=”${result}” />

 

2.<c:choose>

<c:choose> 和 <c:when> 、 <c:otherwise> 一起实现互斥条件执行,类似于 java 中的 if else.

<c:choose> 一般作为 <c:when> 、 <c:otherwise> 的父标签。

eg :

<c:choose>

       <c:when test="${row.v_money<10000}">

              初学下海

       </c:when>

       <c:when test="${row.v_money>=10000&&row.v_money<20000}">

              身手小试

       </c:when>

       <c:otherwise>

              商业能手

       </c:otherwise>

</c:choose>

 

迭代标签 迭代标签有 <c:forEach> 和 </c:forEach>

 

// 遍历记录集

<c:forEach items="${finalResult.rows}" var="row">       

<tr class="<%=tdClass[(rank+1)%2]%>">

<td align="center"><span><%=rank%> </span></td>

<td align="center"><span ><c:out value="${row.player_name}"/></span> </td>

<td align="center"><span > ¥ <c:out value="${row.money}"/></span></td>

</tr>

<%rank++;%>     

</c:forEach> 

 

也可以设定固定次数。

<c:forEach var =”i” begin=”100 “ end= “110”>

       ${i}

</c:forEach>

如果再加个 step= “ 2 ”那么每次增长为 2 。

 

三. sql 标签

 

设置数据源:

<sql:setDataSource dataSource="proxool.breadTycoon" />

// 将数据库某查询的结果声明为一个变量

<sql:query var="finalResult" >

    select player_name,money from tb_player order by money DESC LIMIT 10   

</sql:query>

       然后可以:

  <c:forEach items="${ finalResult.rows}" var="row" varStatus="s">

        advCosts[${s.index}]=${row.adv_cost};

   </c:forEach>

       数据更新标签:

<sql:update>  

                call proc_set_role_salespro(?,?,?,?,?);

                <sql:param value="30"/>

                <sql:param value="39"/>

                <sql:param value="<%=spID%>"/>

                <sql:param value="<%=productID%>"/>

                <sql:param value="1"/>               

            </sql:update>

 

<sql:query var="queryAllChannelCount">

SELECT COUNT(*) as total FROM tb_channel WHERE game_id=? AND begin_round<func_cur_round(?) AND player_id=? AND channel_flag=0

<sql:param value="${gameID}"/>

<sql:param value="${gameID}"/>

<sql:param value="${playerID}"/>

</sql:query>

<c:forEach items="${queryAllChannelCount.rowsByIndex}" var="channelCN">

       <c:set value="${channelCN[0]}" var="channelTotal"/>

</c:forEach>

 

调用存储过程更新数据库:

 

<c:if test="${param.changsubmit!=null}" >

<c:forEach items="${paramValues.pro_id}" var="getpro_id" varStatus="getparamsta">

<sql:update>

 

call proc_set_role_product(?,?,?,?,?,?,?,?);

 

<sql:param value="${gameID}"/>

<sql:param value="${playerID}"/>

<sql:param value="${getpro_id}"/>

<sql:param value="${getpro_id}"/>

<sql:param value="${paramValues.pro_sort[getparamsta.index]}"/>

<sql:param value="${paramValues.price[getparamsta.index]}"/>

<sql:param value="${paramValues.output[getparamsta.index]}"/>

<sql:param value="0"/>

</sql:update>

</c:forEach>

</c:if>

四. 格式化标签

 

<fmt: formatNumber value =”12.3” pattern=”.000”/>

将输出 12.300. 应用样式 ”.000”, 将使格式化后的小数部分有 3 位。不足 3 位将以 0 补齐。

 

       <fmt:formatDate value=”<%=new java.util.Date() %>” type=”date” />

       格式化的结果是: 2007-5-27 .

<fmt:formatDate value=”<%=new java.util.Date() %>” type=”time” />

格式化的结果是: 9:25:11

<fmt:formatDate value=”<%=new java.util.Date() %>” type=”both” />

格式化的结果是: 2007-5-27 9:25:11

 

 

 

补充知识点:

 

1. 替换 request.getParameter("test"):

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

<c:out value="${param.test}" />

</c:if>

 

2. <c:redirect url="a.jsp">

 

3.<c:redirect url="/max.jsp" context="/ch16">

<c:param name="name1" value="665"/>

<c:param name="name3" value=" 斯蒂芬 "/>

</c:redirect>

 

4.<c:forTokens items="zhangsan:lisi:as" delims=":" var="name">

${name}

</c:forTokens>




JSTL-EL表达式

  一个EL表达式包含变量和操作符。任何存储在某个JSP作用范围(如:page、 request、session、application)的bean能被作为一个EL变量来使用。另外,EL支持以下预定义的变量: 变量名称
说明

pageScope
一个包含所有page scope范围的变量集合 (a java.util.Map)

requestScope
一个包含所有request scope范围的变量集合 (a java.util.Map)

sessionScope
一个包含所有session scope范围的变量集合 (a java.util.Map)

applicationScope
一个包含所有application scope范围的变量集合 (a java.util.Map)

param
一个包含所有请求参数的集合 (a java.util.Map),通过每个参数对应一个String值的方式赋值

paramValues
一个包含所有请求参数的集合 (a java.util.Map),通过每个参数对应一个String数组的方式赋值

header
一个包含所有请求的头信息的集合, (a java.util.Map) ,通过每个头信息对应一个String值的方式赋值

headerValues
一个包含所有请求的头信息的集合 (a java.util.Map) ,通过每个头信息的值都保存在一个String数组的方式赋值

cookie
一个包含所有请求的 cookie集合 (a java.util.Map),   通过每一个cookie(javax.servlet.http.Cookie)对应一个cookie值的方式赋值

initParam
一个包含所有应用程序初始化参数的集合(a java.util.Map) ,通过每个参数分别对应一个String值的方式赋值

pageContext
一个javax.servlet.jsp.PageContext类的实例, 用来提供访问不同的请求数据


操作符描述了你对变量所期望的操作。如果你之前曾经使用过任何编程语言的话,在EL表达式中所使用的操作符对你来说可能看起来很熟悉。因为它们和那些在大多数语言中所支持的操作符一样。

Operator
Description

.
访问一个bean属性或者 Map entry

[]
访问一个数组或者链表元素

()
对子表达式分组,用来改变赋值顺序

? :
条件语句,比如: 条件 ? ifTrue : ifFalse.如果条件为真,表达式值为前者,反之为后者

+
数学运算符,加操作

-
数学运算符,减操作或者对一个值取反

*
数学运算符,乘操作

/ or div
数学运算符,除操作

% or mod
数学运算符,模操作(取余)

== or eq
逻辑运算符,判断符号左右两端是否相等,如果相等返回true,否则返回false

!= or ne
逻辑运算符,判断符号左右两端是否不相等,如果不相等返回true,否则返回false

< or lt
逻辑运算符,判断符号左边是否小于右边,如果小于返回true,否则返回false

> or gt
逻辑运算符,判断符号左边是否大于右边,如果大于返回true,否则返回false

<= or le
逻辑运算符,判断符号左边是否小于或者等于右边,如果小于或者等于返回true,否则返回false

>= or ge
逻辑运算符,判断符号左边是否大于或者等于右边,如果大于或者等于返回true,否则返回false

&& or and
逻辑运算符,与操作赋。如果左右两边同为true返回true,否则返回false

|| or or
逻辑运算符,或操作赋。如果左右两边有任何一边为true返回true,否则返回false

! or not
逻辑运算符,非操作赋。如果对true取运算返回false,否则返回true

empty
用来对一个空变量值进行判断: null、一个空String、空数组、 空Map、没有条目的Collection集合

func(args)
调用方法, func是方法名,args是参数,可以没有,或者有一个、多个参数.参数间用逗号隔开


一个EL表达式可以包含:数字、文本(在单引号或者双引号之间)、布尔值、null值。

因为一个EL表达式可以出现在静态文本出现的地方,因此你必须告诉JSP容器它应该被当作一个EL表达式来处理。你可以通过使用定界符来做到这一点。一个EL表达式总是以”${ }”来标记(一个“$”符号和一个左花括号,右花括号)。



除了在这个方法中使用的length()方法,JSTL1.1标签库还包含了许多其它经常使用的函数:

函数
描述

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 首尾的空格,并将其返回


分享到:
评论

相关推荐

    jstl1.1和jstl1.0

    3. **性能和稳定性**:JSTL1.1在性能和稳定性方面有所提升,对JSP 2.0规范的兼容性更好。 4. **API改进**:JSTL1.1可能包含了一些新的API或者对旧API的改进,使得开发者能更好地控制和定制标签的行为。 5. **兼容...

    JSTL.rar_JSTL_JSTL下载

    3. **性能提升**:JSTL标签在服务器端被解析成Java代码执行,相比在JSP中使用脚本,性能通常会有所提升。 4. **遵循标准**:作为Java EE的一部分,JSTL遵循Java Community Process(JCP)的标准,与其他Java EE组件...

    JSTL标签JSTL标签

    **3. JSTL Core标签的常见用法:** - ****:条件判断标签,类似于Java的if语句。 - **, , **:多条件判断,类似于Java的switch语句。 - ****:循环遍历集合或数组。 - ****:设置变量。 - ****:输出变量,安全地...

    jstl练习实例,学习JSTL

    三、JSTL表情 在JSTL中,`开头的标签被称为“表情”,它们类似于JSP EL(Expression Language),但功能更加强大。例如: - `&lt;c:set&gt;`:用于设置变量。 - `&lt;c:out&gt;`:安全地输出变量值,防止XSS攻击。 - `&lt;c:if&gt;`和`...

    JSTL相关Jar包(jstl+standard)

    3. **可移植性**:因为JSTL是标准库,所以可以在不同的服务器和环境中轻松迁移。 4. **更好的性能**:JSTL在服务器端编译成Java代码,执行效率更高。 **如何添加JSTL到项目** 1. 将下载的JSTL jar文件(如`jstl....

    JSTL中文帮助文档

    3. **XML 标签库 (XML Tags)** - `&lt;x:parse&gt;`:解析 XML 文档。 - `&lt;x:out&gt;`:输出 XML 数据。 - `&lt;x:transform&gt;`:使用 XSLT 转换 XML。 4. **SQL 标签库 (SQL Tags)** - `&lt;sql:update&gt;`:执行 SQL 更新操作。...

    jstl帮助 jstl帮助手册 jstl帮助文档

    3. 使用标签:根据需求在JSP页面中插入对应的JSTL标签并配置属性。 在这个压缩包中,`jstl帮助`可能包含了详细的JSTL使用教程、API参考、示例代码等内容。开发者可以通过阅读这些资料,了解每个标签的功能、用法...

    jstl-api-1.2和jstl-impl-1.2

    jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2

    jstl-jar包

    3. **减少脚本片段**:使用JSTL可以减少JSP页面中的Java脚本,使页面更加整洁。 4. **更好的性能**:JSTL标签在服务器端编译成Java代码,执行效率比纯Java脚本更高。 5. **遵循MVC模式**:JSTL有助于实现模型-视图-...

    jstl分页jstl分页

    3. **JSP页面设计** 在JSP页面中,我们需要显示当前页的数据,可以使用`&lt;c:forEach&gt;`标签遍历JavaBean返回的List。同时,还需要根据当前页码计算出前一页和后一页的链接,这通常需要一些逻辑判断,例如`&lt;c:if&gt;`和`...

    jstljar包包含jstl.jar和standard.jar文件

    3. **配置JSP页面**:在JSP页面顶部加入以下指令,以启用JSTL库: ```jsp &lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt; &lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" ...

    jstl-1.2.rar_JSTL_jstl 1.2_jstl jar_jstl-1.1.2.jar _jstl.jar

    3. **XML**:处理XML文档,提供了解析XML、操作XPath表达式等功能。 4. **JDBC**:与数据库交互,简化了数据库查询和结果集的处理。 5. **Function**:提供了若干内置函数,可以扩展到自定义函数库。 描述中提到...

    JSTL教程

    **3. XML标签库**:这个库包含处理XML文档的标签,如解析XML、XSLT转换等。例如,`&lt;x:parse&gt;`用于解析XML字符串,`&lt;x:out&gt;`用于输出XML节点。 **4. SQL标签库**:提供与关系数据库交互的功能,如执行SQL查询、处理...

    JSTL jar包JSTL jar包

    3. **使用JSTL标签** - 现在可以在JSP页面中使用JSTL提供的各种标签,例如迭代一个集合: ```jsp ${yourCollection}" var="item"&gt; ${item} ``` **JSTL的优点:** 1. **可读性** - JSTL标签比脚本元素更清晰,提高...

    jstl源码jstl学习

    **JSTL(JavaServer Pages Standard Tag Library)**是Java Web开发中的一种标准标签库,它为JSP页面提供了一套方便使用的标签,使得开发者能够更高效地编写动态网页。JSTL的主要目标是减少在JSP页面中的脚本代码,...

    jstl,jstl实例源码

    **JSTL(JavaServer Pages Standard Tag Library)详解与实例源码分析** JSTL,全称为JavaServer Pages Standard Tag Library,是Java EE平台中一个用于简化JSP开发的标签库,它提供了一系列预定义的标签,使得...

    jstl学习大全,jstl源码,很全的jstl学习代码

    **3. JSTL fmt标签库** fmt库用于国际化和格式化,提供了处理日期、时间、数字、货币等的标签,如: - `&lt;fmt:formatDate&gt;`:日期格式化 - `&lt;fmt:formatNumber&gt;`:数字格式化 - `&lt;fmt:message&gt;`:获取资源bundle中的...

    jstl标准开发jar包

    3. **XML处理**:JSTL还提供了XML处理标签库(`jstl/xml.jar`),如`&lt;x:parse&gt;`用于解析XML文档,`&lt;x:transform&gt;`用于XSLT转换。这对于处理XML数据和构建基于XML的Web应用非常有用。 4. **国际化和本地化支持**:...

    购物车(JSTL实现)

    3. **会话范围**:在JSP中,我们可以利用JSTL的`&lt;c:set&gt;`标签将购物车对象存储在用户的会话(session)中,这样即使用户浏览其他页面,购物车的状态也能被保留。 4. **显示购物车**:使用`&lt;c:forEach&gt;`标签遍历会话...

    jstl and standard_JSTL_

    3. **JSTL XML Library**:提供了解析、操作XML文档的功能,主要标签有: - `&lt;x:parse&gt;` 解析XML字符串为DOM对象。 - `&lt;x:transform&gt;` 使用XSLT转换XML文档。 - `&lt;x:out&gt;` 显示XML节点内容。 4. **JSTL Function...

Global site tag (gtag.js) - Google Analytics