JSTL使用说明

来源:互联网 发布:设计网页的软件 编辑:程序博客网 时间:2024/05/19 23:04

JSTL使用说明

今天讲讲JSTL基础使用(非原理,原理自己去看源代码,这就是JAVA开源的好处,嘿嘿)

JSTL分为标签库和EL表达式两部分。

要使用JSTL,必须导入标签库

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

 

重点讲下EL表达式和常用标签

<c:out>

<c:set>

<c:forEach>

<c:if>

<c:choose>

 

EL表达式

${}表示

${user}

session.getAttribute("user")一样,这里的不只是session,默认查找顺序page,request.session,application。就是说首先在page范围内查找有没有user,如果没有就到request中查找,以此类推。如果都没有,就为空.当然你也可以指定查找范围,比如${sessionScope.user}就是在session范围内查找。

 属性范围在EL中的名称
Page对应PageScope
Request对应RequestScope
Session对应SessionScope
Application对应ApplicationScope

 

 

如果获取的对象是个JavaBean,可以用“.”或者“[]”来确定bean的属性。

比如有个userBean

Public class UserBean {

Private int uid;

Private String uname;

Public void setUname(String uname){

This.uname=uname;

}

.........

.........

.........

}

 

Session中存放了一个UserBean的实例user,我们要去的uname属性,可以这样

${sessionScope.user["uname"]}或者${sessionScope.user.uname}(可以省略sessionScope,就会按照返回依次查找)

 

 

如果对象是个Map之类的,和上面一样。获取key即可。

map.put("uname","uname");

${map.uname}

 

如果对象是个List直接用下标就行

list.add("hello1");

list.add("hello2");

${list[0]}

就等于java代码中的list.get(0)

 

<c:out>标签

<c:out>标签是页面输出标签

 

<c:out value="" default="">

Vaue属性是要输出的值(可以是EL

Default是当valuenull的时候输出的内容

<c:set>标签

<c:set>标签是设置变量或者属性的值

 

<c:out value="" var="" target="" property="" scope="">

Value设置的值

Var是设置的变量

Target是个javaBean

Property是要设置的属性名(targetproperty共存,但是使用target的时候就不能使用var,可以理解为c:set标签有两种版本或者两种使用方式)

Scope范围

 

Var版本

 

<c:set var="i" value="1"></c:set>

<c:set var="str" value="hello"></c:set>

(如过变量在返回内没有,会创建一个新对象)

 

EL引用的时候就是${i}${str},显示1hello

 

Target版本

比如前面的UserBean,现在userUserBean的实例对象,且uname等于“admin”,我可以用set来修改

<c:set target="${user}" property="uname" value="supermanager"></c:set>

现在再看看uname的值${user["uname"]},显示的不是“admin”而是“supermanager

 

<c:forEach>

<c:forEach>标签就像是JAVA中的for循环

 

<c:forEach items="" var="" begin="" step="" end="">

 

Items循环体(必须)

Var存放循环的变量,

Begin开始位置

End结束位置

Step步长

如果用java中的for来比较

 

List<String> strs=new ArrayList<String>();

 

<c:forEach items="strs" var="str" begin="5" step="2" end="14">

<c:out value="${str}"></c:out>

<c:forEach>

可以理解问下面的JAVA代码

Int i=0;

For(i=5;i<=14;i+=2){

String str=strs.get(i);

Out.print(str);

}

 

问题:现有如下信息,用JSTL显示出来?

Map<String, Object> map1 = new HashMap<String, Object>();

map1.put("uname", "admin");

map1.put("upwd", "adminpwd");

Map<String, Object> map2 = new HashMap<String, Object>();

map2.put("uname", "admin2");

map2.put("upwd", "adminpwd2");

List<Map> list = new ArrayList<Map>();

list.add(map1);

list.add(map2);

 

解题:

<c:forEach items="${list}" var="maps">

<c:forEach items="${maps}" var="map">

<c:out value="key${map['key']}   value:${map['value']}"></c:out><br />

</c:forEach>

<br />

</c:forEach>

显示截图

 

If标签

javaif差不多。

Test表达死,var存放表达式的值

<c:set vat="t" value="admin"></c:set>

<c:if test="${t == 'chenjin2'}" var="v">

<c:out value="${v}"></c:out>

</c:if>

页面显示false

 

<c:choose>标签

上面的if只能做一般的判断,不能像JAVA中的if(){}else if{}else{}这样,现在就可以用choose标签了。

<c:set var="i" value="14"></c:set>

<c:choose>

<c:when test="${i<5}">

i小于5

</c:when>

<c:when test="${i<10}">

i小于10

</c:when>

<c:otherwise>

i大于等于10

</c:otherwise>

</c:choose>

可以理解为choose标签说明里里面的是多重判断

When就等于java中的else if

Otherwise 就等于java中多重判断的最后的那个else

 

转载请注明http://blog.csdn.net/henjue

原创粉丝点击