JSTL笔记

来源:互联网 发布:交通流仿真软件 编辑:程序博客网 时间:2024/06/11 19:32

2 JSTL表达式

2.1运算符

2.1.1算术运算符

<td>\${1+1}</td>

使用“\”是为了使程序不要进行运算,而按照原样输出

2.1.2验证运算符

${empty input} 返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为null的表达式则被认为是空,即无元素的集合或数组。如果参数是对长度为0String求值所得的结果,则empty运算符也将返回true

2.2标量标记

2.2.1定义变量

1)只定义变量名以及变量值,不指定scope(范围)

     <c:set  var=”username”  value=”buda”></ c:set >

2)将value的值存储到范围为scope的变量中

     <c:set  var=”username”  value=”buda”  scope=”page/request/session/application”></ c:set >

3)将本体内容的数据存储到范围为scope的变量中

     <c:set  var=”username”  scope=”page/request/session/application”>

本体内容

</ c:set >

2.2.2输出变量

<c:out>只用来显示数据的内容。

1)通过在<c:out>中指定需要显示的值

     <c:out value=”hello world!”/>

2)通过escapeXml属性设置是否将value中的内容按照原样输出。

     原样输出指的是JSP页面响应客户端请求时生成HTML文件是按照原样输出的。

3)通过default属性来指定默认值。如果value的值为null,则显示default的值。

    <c:out  value=”${username}”  default=”No data”/>

2.2.3删除变量

JSTL中使用<c:remove>来删除限制了作用域的变量,它获取两个属性。var属性指定待删除变量的名称,scope属性是可选的,它表示待删除变量来自哪个作用域,默认为page

      <c:remove  var=”number”  scope=”session”>

假如不指定scope,则< c:remove >会从pagerequestsessionapplication中顺序寻找是否存在名称为number的数据,如果找到了,则将它删除,如果没找到就不会有任何操作。

2.3表达式

2.3.1 .[]运算符

EL通过.[]运算符来存取数据。比如:

${applicationScope.user.username}

等价于

${ applicationScope.user.[“username”]}

二者也可以混合使用,例如:

${sessionScope.shoppingCart[0].price}

二者之间也有一定的差异:

1)如果存取的属性名包含一些特殊字符,如“.”或者是“-”等非字母或数字的符号时,就必须使用[]

2)如果使用变量来传入,那么也就只能使用[]

     <%String data=”username”;%>

 ${ applicationScope.user.[data] }

下面的代码等效于上面的代码:

${applicationScope.user.username}

2.3.2 与存储有关的隐含对象

JSP中有隐含对象,同样在EL中也有自己的隐含对象。

先来介绍4个与存储范围有关的隐含对象,分别是applicationScopesessionScoperequestScopepageScope,类型都为java.util.map。这些隐含对象使用时和JSP中的pageContextrequestsessionapplication一样。但是这4个隐含对象只能用来取得某个范围的属性值,即JSP中的getAttributeString name),不能取得其他的信息。

1applicationScope对象:是指存储在服务器范围内,只要服务器不重启或移除变量,所有的页面可以得到变量值。

2sessionScope对象:是指一次会话范围内,如果用户不重新打开浏览器都是在一次会话范围内。所有的页面都可以得到变量值。

3requestScope对象:是指一次请求范围内,使用服务器端跳转都是属于一次请求范围。如果用户单击其他链接,那么这次请求就会结束,进入下一次请求,其他页面将无法得到变量值。

4pageScope对象:是指一个页的范围。

2.3.3 与输入有关的隐含对象

与输入有关的隐含对象有两个,分别为paramparamValues,用来取得用户的请求参数。在使用EL之前可以使用如下代码取得用户的请求参数:

request.getParameter(String name);

request.getParameterValues(name);

在使用EL时可以使用paramparamValues两者来取得用户请求参数。

使用param接受的数据所需要的参数只有一个值,但是如果参数有几个值,必须使用paramValues来接受参数。

3

3.1流程控制

3.1.1<c:if>标签的使用

<c:if>标签有两种语法格式。一种没有本体内容;令一种有本体内容。

1)没有本体内容的<c:if>标签

    <c:if test=”testCondition” var=”varName”  [scope=”{page/request/session/application}]”/>

2)有本体内容的<c:if>标签

<c:if test=”testCondition” var=”varName” [scope=”{page/request/session/application}]”>

本体内容

</if>

3.1.2<c:choose><c:when><c:otherwise>标签的使用

<c:choose>本身只能当<c:when><c:otherwise>的标签。其中可以有一个或多个<c:when>标签,有0个或多个<c:otherwise>的标签,其格式如下:

<c:choose>

···

<c:when test=”testCondition”>

</ c:when >

···

<c:otherwise>

</c:otherwise>

</c:choose>

3.2循环控制

3.2.1<c:forEach>标签的使用

<c:forEach>标签有两种语法格式。一种用来遍历集合对象的成员;另一种用来使语句循环执行指定次数。

1<c:forEach>遍历集合对象的成员语法格式如下:

     <c:forEach  [var=”varname”]  items=”collectin”  [varStatus=”varStatusName”]

[begin=”begin”] [end=”end”] [step=”step”]>

本体内容

</c:forEach>

2

3.2.2<c:forEach>标签取得数组中的值

3.2.3<c:forEach>标签取得简单集合的值

3.2.4<c:forEach>标签取得复杂集合的值

3.2.5<c:forEach>标签取得复杂Map的值

原创粉丝点击