Chinaunix首页 | 论坛 | 博客
  • 博客访问: 528038
  • 博文数量: 147
  • 博客积分: 10105
  • 博客等级: 上将
  • 技术积分: 1594
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-14 10:18
文章分类

全部博文(147)

文章存档

2011年(4)

2010年(4)

2009年(6)

2008年(5)

2007年(40)

2006年(88)

我的朋友

分类: Java

2006-12-04 16:01:52

以下来源于SPRING guide
 
<%@ taglib prefix="c" uri="" %>


Login Success!!!


Current User:



Your current messages:


var="item"
begin="0"
end="9"
step="1"
varStatus="var">

*

${item}




页面逻辑非常简单,首先显示当前登录用户的用户名。然后循环显示当前用户的通知消息
“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="" %>
上面这句话申明了页面中所引用的taglib,指定其前缀为“c”,也就是说,在页面中,
所有以“c”为前缀,形同的节点都表明是此taglib的引用,在这里,也就是对JSTL
Core Lib的引用。
这里需要注意的是,笔者所采用的Web 容器为Tomcat 5(支持Servlet 2.4/JSP2.0
规范)以及Apache JSTL 2.0()。

将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代码中的表达式编写方式大致相同。
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
……

上面这段代码的意思是针对messages 对象进行循环,循环中的每个循环项的引用变量为
item,循环范围是从0到9,每次步长为1。而varStatus则定义了一个循环状态变量var,
循环状态变量中保存了循环进行时的状态信息,包括以下几个属性:
属性 类型 说明
index int 当前循环索引号
count int 成员总数
first boolean 当前成员是否首位成员
last boolean 当前成员是否末尾成员
再看:

*

这段代码演示了判定Tag 的使用方法。可以看到,其test属性指明了判定条件,
判定条件一般为一个EL表达式。
并没有提供else子句,使用的时候可能有些不便,此时我们可以通过
tag来达到类似的目的:


*


!


类似Java 中的switch 语句,提供了复杂判定条件下的简化处理手法。其
子句类似case子句,可以出现多次。上面的代码,在奇数行时输出“*”号,
而偶数行时输出“!”。
阅读(1614) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~