| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1272 人关注过本帖
标题:jsp中的JTSL標簽的學習筆記
只看楼主 加入收藏
bagger
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:33
帖 子:891
专家分:0
注 册:2005-8-16
收藏
 问题点数:0 回复次数:2 
jsp中的JTSL標簽的學習筆記
以下来源于SPRING guide
 
<%@ taglib prefix="c" uri="http://java. %>
<html>
<body>
<p>Login Success!!!</p>
<p>Current User:
<c:out value="${logininfo.username}"/><br>
</p>
<p>Your current messages:</p>
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
<c:if test="${var.index % 2 == 0}">
*
</c:if>
${item}<br>
</c:forEach>
</body>
</html>
页面逻辑非常简单,首先显示当前登录用户的用户名。然后循环显示当前用户的通知消息
“messages”。如果当前循环索引为奇数,则在消息前追加一个“*”号(这个小特性在这里
似乎有些多余,但却为不熟悉JSTL 的读者提供了如何使用JSTL Core taglib 进行循环和
逻辑判断的样例)。
SpringFrameWork Developer’s Guide Version 0.6
October 8, 2004 So many open source projects. Why not Open your Documents?
实际上这只是个普通JSTL/JSP页面,并没有任何特殊之处,如果说有些值得研究的技术,
也就是其中引用的JSTL Core Taglib
<%@ taglib prefix="c" uri="http://java. %>
上面这句话申明了页面中所引用的taglib,指定其前缀为“c”,也就是说,在页面中,
所有以“c”为前缀,形同<c:xxxx>的节点都表明是此taglib的引用,在这里,也就是对JSTL
Core Lib的引用。
这里需要注意的是,笔者所采用的Web 容器为Tomcat 5(支持Servlet 2.4/JSP2.0
规范)以及Apache JSTL 2.0([url]http://jakarta.[/url])。
<c:out value="${logininfo.username}"/>
<c:out>将value 中的内容输出到当前位置,这里也就是把logininfo 对象的
username属性值输出到页面当前位置。
${……}是JSP2.0 中的Expression Language(EL)的语法。它定义了一个表达式,
其中的表达式可以是一个常量(如上),也可以是一个具体的表达语句(如forEach循环体中
的情况)。典型案例如下:
? ${logininfo.username}
这表明引用logininfo 对象的username 属性。我们可以通过“.”操作符引
用对象的属性,也可以用“[]”引用对象属性,如${logininfo[username]}
与${logininfo.username}达到了同样的效果。
“[]”引用方式的意义在于,如果属性名中出现了特殊字符,如“.”或者“-”,
此时就必须使用“[]”获取属性值以避免语法上的冲突(系统开发时应尽量避免
这一现象的出现)。
与之等同的JSP Script大致如下:
LoginInfo logininfo =
(LoginInfo)session.getAttribute(“logininfo”);
String username = logininfo.getUsername();
可以看到,EL大大节省了编码量。
这里引出的另外一个问题就是,EL 将从哪里找到logininfo 对象,对于
${logininfo.username}这样的表达式而言,首先会从当前页面中寻找之前是
否定义了变量logininfo,如果没有找到则依次到Request、Session、
Application 范围内寻找,直到找到为止。如果直到最后依然没有找到匹配的
变量,则返回null.
如果我们需要指定变量的寻找范围,可以在EL表达式中指定搜寻范围:
${pageScope.logininfo.username}
${requestScope.logininfo.username}
${sessionScope.logininfo.username}
SpringFrameWork Developer’s Guide Version 0.6
October 8, 2004 So many open source projects. Why not Open your Documents?
${applicationScope.logininfo.username}
在Spring 中,所有逻辑处理单元返回的结果数据,都将作为Attribute 被放
置到HttpServletRequest 对象中返回(具体实现可参见Spring 源码中
org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributes方法的实现代码),也就是说Spring
MVC 中,结果数据对象默认都是requestScope。因此,在Spring MVC 中,
以下寻址方法应慎用:
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
? ${1+2}
结果为表达式计算结果,即整数值3。
? ${i>1}
如果变量值i>1的话,将返回bool类型true。与上例比较,可以发现EL会自
动根据表达式计算结果返回不同的数据类型。
表达式的写法与java代码中的表达式编写方式大致相同。
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
……
</c:forEach>
上面这段代码的意思是针对messages 对象进行循环,循环中的每个循环项的引用变量为
item,循环范围是从0到9,每次步长为1。而varStatus则定义了一个循环状态变量var,
循环状态变量中保存了循环进行时的状态信息,包括以下几个属性:
属性 类型 说明
index int 当前循环索引号
count int 成员总数
first boolean 当前成员是否首位成员
last boolean 当前成员是否末尾成员
再看:
<c:if test="${var.index % 2 == 0}">
*
</c:if>
这段代码演示了判定Tag <c:if>的使用方法。可以看到,其test属性指明了判定条件,
判定条件一般为一个EL表达式。
<c:if>并没有提供else子句,使用的时候可能有些不便,此时我们可以通过<c:choose>
tag来达到类似的目的:
<c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
!
</c:otherwise>
</c:choose>
类似Java 中的switch 语句,<c:choose>提供了复杂判定条件下的简化处理手法。其
中 <c:when>子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,
而偶数行时输出“!”。
搜索更多相关主题的帖子: JTSL jsp 
2007-12-18 23:52
guoxhvip
Rank: 8Rank: 8
来 自:聖西羅南看臺
等 级:贵宾
威 望:44
帖 子:4052
专家分:135
注 册:2006-10-8
收藏
得分:0 
支持一下

愛生活 && 愛編程
2007-12-19 00:28
bagger
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:33
帖 子:891
专家分:0
注 册:2005-8-16
收藏
得分:0 
自己顶

【三元毕业设计论文】
三元论文真的只有三元钱
客服QQ:742670649
http://shop35094218./
2008-01-11 16:59
快速回复:jsp中的JTSL標簽的學習筆記
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043724 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved