您的位置:首页 > Web前端 > JavaScript

JSTL核心标签库和EL表达式的联合使用

2014-03-03 19:29 627 查看
10.1 JSTL+EL+Servlet的示例(1)

先来了解一下在Servlet中要做什么样的任务吧。

(1)Servlet代码如下:
import ghy_jstl.Student;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class jstl_servlet extends HttpServlet {

public jstl_servlet() {
super();
}

public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// 放入String类型
String simple_string_username = "gaohongyan";
request.setAttribute("simple_string_username",
simple_string_username);

// 往AL中放入String类型
ArrayList al_simple_string = new ArrayList();
al_simple_string.add("simple_string1");
al_simple_string.add("simple_string2");
request.setAttribute("al_simple_string", al_simple_string);

// 往AL中放入复杂类型(BEAN)
Student Student1 = new Student();
Student1.setUsername("gaohongyan1");

Student Student2 = new Student();
Student2.setUsername("gaohongyan2");

ArrayList al_simple_bean = new ArrayList();
al_simple_bean.add(Student1);
al_simple_bean.add(Student2);
request.setAttribute("al_simple_bean", al_simple_bean);

// 放入String类型,使用c:out输出
String c_out_simple_string = "hello beijing 2008";
request.setAttribute("c_out_simple_string",
c_out_simple_string);

// 往request中放入复杂类型
Student Student_complex = new Student();
Student_complex.setUsername("Student_complex");
request.setAttribute("Student_complex", Student_complex);

// default_null default_nil的情况
String default_null = null;
String default_nil = "";
request.setAttribute("default_null", default_null);
request.setAttribute("default_nil", default_nil);

// fckeditor在线编辑器内容的输出
String fckeditor = "com>www.sohu.com";
request.setAttribute("fckeditor", fckeditor);

// 通过变量的值来访问属性的EL实例
String var_name = "username";
request.setAttribute("var_name", var_name);

// 通过EL表达式获取HashMap简单的内容
HashMap hm_simple_string = new HashMap();
hm_simple_string.put("key1", "value1");
hm_simple_string.put("key2", "value2");
request.setAttribute("hm_simple_string", hm_simple_string);

// 通过EL表达式获取HashMap复杂的内容
HashMap hm_complex = new HashMap();
hm_complex.put("key1", Student_complex);
request.setAttribute("hm_complex", hm_complex);

// 与生存期有关的隐含对象pageScope,requestScope,
sessionScope,applicationScope
String username_request = "gaohongyan in request";
request.setAttribute("username_request", username_request);

// 嵌套式
ArrayList db_list = new ArrayList();
Student db_Student1 = new Student();
db_Student1.setUsername("gaohongyan1");

Student db_Student2 = new Student();
db_Student2.setUsername("gaohongyan2");

Student db_Student3 = new Student();
db_Student3.setUsername("gaohongyan3");

Student db_Student4 = new Student();
db_Student4.setUsername("gaohongyan4");

Student db_Student5 = new Student();
db_Student5.setUsername("gaohongyan5");

db_list.add(db_Student1);
db_list.add(db_Student2);
db_list.add(db_Student3);
db_list.add(db_Student4);
db_list.add(db_Student5);

request.setAttribute("db_list", db_list);

ArrayList al = new ArrayList();
al.add(new aaa());
request.setAttribute("al", al);

request.getRequestDispatcher("/219.jsp").
forward(request, response);

}

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

}

public void init() throws ServletException {

}

}


10.1 JSTL+EL+Servlet的示例(2)

(2)工具类Student类代码如下:
package ghy_jstl;

public class Student {

String username;
int age;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}


(3)工具类aaa类代码如下:
import ghy_jstl.Student;

import java.util.HashMap;

public class aaa {
HashMap hp = new HashMap();

public aaa() {
super();
Student s = new Student();
s.setUsername("ly");
hp.put("key", s);
}

public HashMap getHp() {
return hp;
}

public void setHp(HashMap hp) {
this.hp = hp;
}
}


(4)JSP代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page isELIgnored="false"%>
<html>
<body>
s imple_string_username value=${simple_string_username }
<br />
<br>
al_simple_string[0]=${al_simple_string[0]}
<br />
al_simple_string[1]=${al_simple_string[1]}
<br />
al_simple_bean[0]的username的值:${al_simple_bean[0]['username']}
<br />
al_simple_bean[1]的username的值:${al_simple_bean[1]['username']}
<br />
al_simple_bean[0]的age的值:${al_simple_bean[0]['age']}
<br />
c_out_simple_string的值是:
<c:out value="${c_out_simple_string}"></c:out>
<br />
c_out输出复杂类型的属性值为:
<c:out value="${Student_complex['username']}"></c:out>
<br />
default_null的值是:
<c:out value="${default_null}" default="this is null"></c:out>
<br />
default_nil的值是:
<c:out value="${default_nil}" default="this is nil"></c:out>
<br />
使用BODY来代替default属性:
<c:out value="${default_null}">this is null too</c:out>
<br />
使用c:out标签显示出在线编辑器的代码:
<c:out value="${fckeditor}" escapeXml="false"></c:out>
<br />
使用c:out标签显示jstl标记(1):
<c:out value="<c:out>out</out>" escapeXml="false"></c:out>
<br />
使用c:out标签显示jstl标记(2):
<c:out value="<c:out>out</out>"></c:out>
<br />
EL表达式的计算+-*/%:
<c:out value="${3+1}"></c:out>
<br />
通过变量的值来访问属性的EL实例:
<c:out value="${Student_complex[var_name]}"></c:out>
<br />
通过EL表达式获取HashMap简单的内容:
<c:out value="${hm_simple_string['key1']}"></c:out>
<br />
通过EL表达式获取HashMap复杂的内容:
<c:out value="${hm_complex['key1']['username']}"></c:out>
<br />
EL中的保留字and:
<c:out value="${true and true}"></c:out>
<c:out value="${true and false}"></c:out>
<br />
EL中的保留字or:
<c:out value="${true or true}"></c:out>
<c:out value="${true or false}"></c:out>
<br />
EL中的保留字not:
<c:out value="${not true}"></c:out>
<c:out value="${not false}"></c:out>
<br />
EL中的保留字null:
<c:out value="${default_null==null}"></c:out>
<c:out value="${default_nil==null}"></c:out>
<br />
EL中的保留字mod:
<c:out value="${5 mod 3}"></c:out>
<br />
EL表达式的empty运算符:
<c:out value="${empty default_null}"></c:out>
<c:out value="${empty default_nil}"></c:out>
<br />
与参数有关的隐含对象param:${param.username}
<br />
与生存期有关的隐含对象pageScope,requestScope,sessionScope,applicationScope:
<br />
${requestScope.username_request} -${sessionScope.username_request}-
<br />
JSTL的c:set标签的使用情况1(无BODY):
<c:set var="str_var" value="gaohongyan"></c:set>
${str_var}
<br />
JSTL的c:set标签的使用情况1(有BODY):
<c:set var="str_var_inbody">gaohongyan in body</c:set>
${str_var_inbody}
<br />
JSTL的c:if标签的使用情况1(无BODY):
<c:if test="${str_var=='gaohongyan'}" var="result_boolean"></c:if>
${result_boolean}
<br />
JSTL的c:if标签的使用情况1(有BODY):
<c:if test="${str_var=='gaohongyan'}" var="
result_boolean">hello beijing 2008</c:if>
${result_boolean}
<br />
相当于switch语句的<c:choose>标签:
<c:choose>
<c:when test="${str_var=='gaohongyan'}">value
is gaohongyan</c:when>
<c:when test="${str_var=='gaohongyan1'}">value
is gaohongyan1</c:when>
<c:when test="${str_var=='gaohongyan2'}">value
is gaohongyan2</c:when>
<c:otherwise>valuse is other</c:otherwise>
</c:choose>
<br />
JSTL中的循环c:forEach标签(ArrayList:显示简单类型):
<br />
<c:forEach items="${al_simple_string}" var="item">${item}<br>
</c:forEach>
JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):
<br />
<c:forEach items="${al_simple_bean}" var="item">
${item['username']}<br>
</c:forEach>
JSTL中的循环c:forEach标签(HashMap:显示简单类型):
<br />
<c:forEach items="${hm_simple_string}" var="item"
>${item.key}:${item.value}<br>
</c:forEach>
JSTL中的循环c:forEach标签(HashMap:显示复杂类型):
<br />
<c:forEach items="${hm_complex}" var="item">
${item.value['username']}<br>
</c:forEach>
<br />
隔行显示不同颜色:
<br />
<table width="200" border="1">
<tr bgcolor="#FF0000">
<td width="89">
<div align="center">
id
</div>
</td>
<td width="95">
<div align="center">
value
</div>
</td>
</tr>
<c:forEach items="${db_list}" var="db_bean"
varStatus="status_var">
<c:if test="${status_var.index % 2 ==0}">
<tr>
<td>
${status_var.index+1}
</td>
<td>
${db_bean['username'] }
</td>
</tr>
</c:if>
<c:if test="${status_var.index % 2 !=0}">
<tr bgcolor="#999999">
<td>
${status_var.index+1}
</td>
<td>
${db_bean['username'] }
</td>
</tr>
</c:if>
</c:forEach>

</table>

<c:out value="${al[0]['hp']['key']['username']}"></c:out>
</body>
</html>


【责任编辑:云霞 TEL:(010)68476606】

10.1 JSTL+EL+Servlet的示例(3)

(5)程序在IE中输出的结果如下:
s imple_string_username value=gaohongyan
al_simple_string[0]=simple_string1
al_simple_string[1]=simple_string2
al_simple_bean[0]的username的值:gaohongyan1
al_simple_bean[1]的username的值:gaohongyan2
al_simple_bean[0]的age的值:0
c_out_simple_string的值是:hello beijing 2008
c_out输出复杂类型的属性值为:Student_complex
default_null的值是:this is null
default_nil的值是:this is nil
使用BODY来代替default属性:this is null too
使用c:out标签显示出在线编辑器的代码:www.sohu.com
使用c:out标签显示jstl标记(1):out
使用c:out标签显示jstl标记(2):<c:out>out</out>
EL表达式的计算+-*/%:4
通过变量的值来访问属性的EL实例:Student_complex
通过EL表达式获取HashMap简单的内容:value1
通过EL表达式获取HashMap复杂的内容:Student_complex
EL中的保留字and:true false
EL中的保留字or:true true
EL中的保留字not:false true
EL中的保留字null:true false
EL中的保留字mod:2
EL表达式的empty运算符:true true
与参数有关的隐含对象param:${param.username}
与生存期有关的隐含对象pageScope,requestScope,sessionScope,applicationScope:
gaohongyan in request --
JSTL的c:set标签的使用情况1(无BODY):gaohongyan
JSTL的c:set标签的使用情况1(有BODY):gaohongyan in body
JSTL的c:if标签的使用情况1(无BODY):true
JSTL的c:if标签的使用情况1(有BODY):hello beijing 2008 true
相当于switch语句的c:choose标签:value is gaohongyan
JSTL中的循环c:forEach标签(ArrayList:显示简单类型):
simple_string1
simple_string2
JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):
gaohongyan1
gaohongyan2
JSTL中的循环c:forEach标签(HashMap:显示简单类型):
key1:value1
key2:value2
JSTL中的循环c:forEach标签(HashMap:显示复杂类型):
Student_complex


隔行显示不同颜色,如图10-1所示。


图10-1 隔行显示不同颜色
通过在Servlet中转发219.jsp文件用JSTL和EL表达式把数据显示在IE中。

10.2 使用EL表达式显示String类型变量的示例

在Servlet文件中使用以下代码:将String变量存入到request作用域中。
String simple_string_username = "gaohongyan";
request.setAttribute("simple_string_username", simple_string_username);


在JSP文件中:使用simple_string_username value=${simple_string_username }显示request中的变量simple_string_username,而这个变量是在Servlet中存入request的。

EL表达式的使用非常简单,格式为"${}",大括号"{}"中为表达式,在本例中是在request作用域中的字符串变量。

显示结果为:
simple_string_username value=gaohongyan


10.3 使用EL表达式显示ArrayList存储String类型变量的示例

在Servlet文件中:
// 往AL中放入String类型
ArrayList al_simple_string = new ArrayList();
al_simple_string.add("simple_string1");
al_simple_string.add("simple_string2");
request.setAttribute("al_simple_string", al_simple_string);


在JSP文件中:
al_simple_string[0]=${al_simple_string[0]}
al_simple_string[1]=${al_simple_string[1]}


因为变量al_simple_string是一个数组列表类型(ArrayList),其中存储的是String类型数据值。可以通过像Java语言的下标的形式取出指定下标元素的数据值,并显示出来。

显示结果为:
al_simple_string[0]=simple_string1
al_simple_string[1]=simple_string2


10.4 使用EL表达式显示ArrayList存储bean类类型变量的示例

在Servlet文件中:
// 往AL中放入复杂类型(bean)
Student Student1 = new Student();
Student1.setUsername("gaohongyan1");

Student Student2 = new Student();
Student2.setUsername("gaohongyan2");

ArrayList al_simple_bean = new ArrayList();
al_simple_bean.add(Student1);
al_simple_bean.add(Student2);
request.setAttribute("al_simple_bean", al_simple_bean);


ArrayList里面存储的是bean的实例,即复杂数据类型。Student的代码在前面已经列出,其实是一个只有username和age属性的class,并且有对应的set和get方法。

在JSP文件中:
al_simple_bean[0]的username的值:${al_simple_bean[0]['username']}
al_simple_bean[1]的username的值:${al_simple_bean[1]['username']}
al_simple_bean[0]的age的值:${al_simple_bean[0]['age']}


由于al_simple_bean是ArrayList类型,并且每一个位置存储的是一个bean,所以想访问username必须取得每一个ArrayList元素中的bean,这样可以通过下载的方法来取得。通过下标得出的数据类型是一个Student类的实例,然后就可以通过方括号里面带单引号([''])的形式来访问bean的property属性了。

显示结果为:
al_simple_bean[0]的username的值:gaohongyan1
al_simple_bean[1]的username的值:gaohongyan2
al_simple_bean[0]的age的值:0


10.5 使用JSTL中的c:out标签显示String类型变量的示例

在Servlet文件中:
// 放入String类型,用c:out输出
String c_out_simple_string = "hello beijing 2008";
request.setAttribute("c_out_simple_string", c_out_simple_string);


在JSP文件中:
c_out_simple_string的值是:
<c:out value=< span="">"${c_out_simple_string}">


<c:out>标签是JSTL的核心标签库中的一员,使用非常普遍且非常简单。在本示例中只使用c:out标签的value属性,value属性值的来源是EL表达式,通过EL表达式取出变量c_out_simple_string的值赋给c:out标签的value属性,然后通过c:out标签显示出来。

显示结果为:
c_out_simple_string的值是: hello beijing 200


[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]

10.6 使用JSTL标签显示bean中属性的示例

在Servlet文件中:
// 往request中放入复杂类型
Student Student_complex = new Student();
Student_complex.setUsername("Student_complex");
request.setAttribute("Student_complex", Student_complex);


将Student的实例存放到request作用域中。

在JSP文件中:
c_out输出复杂类型的属性值为:<c:out value="$
{Student_complex['username']}"></c:out>


由于Student_complex是一个bean的实例,要想访问bean的属性,只需要使用方括号加单引号(如['propertyName'])的形式来访问属性的值,自动调用属性的get方法,然后通过c:out标签显示出来。

显示结果为:

c_out输出复杂类型的属性值为:Student_complex

10.7 使用JSTL标签对null和""在默认值上的区别

在Servlet文件中2个变量的值分别为null和"":

// default_null default_nil的情况
String default_null = null;
String default_nil = "";
request.setAttribute("default_null", default_null);
request.setAttribute("default_nil", default_nil);


在JSP文件中:

default_null的值是:
<c:out value="${default_null}" default="this is null"></c:out>
<br />


default_nil的值是:
<c:out value="${default_nil}" default="this is nil"></c:out>
<br />


用BODY来代替default属性:
<c:out value="${default_null}">this is null too</c:out>


从JSP的JSTL代码中可以看到,c:out标签使用了default属性,如果值为空则把default的值显示出来,那么这个"空"到底是指null还是""呢?看一下结果吧。

显示结果为:

default_null的值是:this is null

default_nil的值是:this is nil

用BODY来代替default属性:this is null too

从结果中可以看到,这个default中的值对null有效,而对""无效。

10.8 使用JSTL标签显示在线编辑器的内容(fckeditor)

在Servlet文件中:

使用c:out标签显示出在线编辑器的代码:

<c:out value=< span="">"${fckeditor}" escapeXml="false">
使用c:out标签显示jstl标记(1):
<c:out value=< span="">"out" escapeXml="false">
使用c:out标签显示jstl标记(2):
<c:out value=< span="">"out">
EL表达式的计算+-*/%:
<c:out value=< span="">"${3+1}">


在这里只是模拟从数据库中将在线编辑器中的内容赋值给一个String变量,然后将这个变量放到request中,准备显示出来。

在JSP文件中:

//用c:out标签显示出在线编辑器的代码:
<c:out value=< span="">"${fckeditor}" escapeXml="false">


在这里使用c:out标签的escapeXml属性来进行"< >"符号的转义,要设置为false。

显示结果为:
使用c:out标签显示出在线编辑器的代码:www.sohu.com
使用c:out标签显示jstl标记(1):out
使用c:out标签显示jstl标记(2):out
EL表达式的计算+-*/%:4

代码www.sohu.com在IE中是一个超级链接。

[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]

10.9 使用JSTL标签和EL表达式通过变量显示属性的值

在Servlet文件中:

// 通过变量的值来访问属性的EL实例
String var_name = "username";
request.setAttribute("var_name", var_name);


在JSP文件中:
//通过变量的值来访问属性的EL实例
<c:out value=< span="">"${Student_complex[var_name]}">


EL表达式中的Student_complex是一个类的实例,是前面存入request作用域中的。然后通过变量var_name来间接地访问Student_complex实例中的username属性的值,并显示出来。

显示结果为:

通过变量的值来访问属性的EL实例: Student_complex
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]

10.10 使用JSTL标签和EL表达式显示HashMap中String的值

在Servlet文件中:
// 通过EL表达式获取HashMap简单的内容
HashMap hm_simple_string = new HashMap();
hm_simple_string.put("key1", "value1");
hm_simple_string.put("key2", "value2");
request.setAttribute("hm_simple_string", hm_simple_string);


在JSP文件中:
//通过EL表达式获取HashMap简单的内容:
<c:out value=< span="">"${hm_simple_string['key1']}">


在JSP文件中,hm_simple_string是一个HashMap实例,Map是一个以key键value值配对的数据结构。通过key显示出value,这样就可以直接使用['key_name']的形式显示出指定key所对应的value了。

显示结果为:

通过EL表达式获取HashMap简单的内容value1

10.11 使用JSTL标签和EL表达式显示HashMap中bean属性的值

在Servlet文件中:
// 通过EL表达式取HashMap复杂的内容
HashMap hm_complex = new HashMap();
hm_complex.put("key1", Student_complex);
request.setAttribute("hm_complex", hm_complex);


HashMap存放的是一个类class的实例。

在JSP文件中:
//通过EL表达式取HashMap复杂的内容
<c:out value="${hm_complex['key1']['username']}"></c:out>


hm_complex是一个HashMap类型,通过key可以取得value。但value是一个bean类型,所以就需要先通过['key1']来取得指定key所对应的value,再通过['username']来访问bean的username属性,并显示出来。

显示结果为:

通过EL表达式取HashMap复杂的内容:Student_complex

10.12 EL表达式中的保留字

在JSP文件中:

EL中的保留字and:
<c:out value="${true and true}"></c:out>
<c:out value="${true and false}"></c:out>
<br />
EL中的保留字or:
<c:out value="${true or true}"></c:out>
<c:out value="${true or false}"></c:out>
<br />
EL中的保留字not:
<c:out value="${not true}"></c:out>
<c:out value="${not false}"></c:out>
<br />
EL中的保留字null:
<c:out value="${default_null==null}"></c:out>
<c:out value="${default_nil==null}"></c:out>
<br />
EL中的保留字mod:
<c:out value="${5 mod 3}"></c:out>
<br />
EL表达式的empty运算符:
<c:out value="${empty default_null}"></c:out>
<c:out value="${empty default_nil}"></c:out>
<br />
与参数有关的隐含对象param:${param.username}


显示结果为:
EL中的保留字and:true false
EL中的保留字or:true true
EL中的保留字not:false true
EL中的保留字null:true false
EL中的保留字mod:2
EL表达式的empty运算符:true true
与参数有关的隐含对象param:${param.username}


在这个示例中,需要注意的是保留字null和empty在处理null和""上的区别,这点在真实的软件项目中经常遇到,一定要掌握这个技能点。

还有一个是param隐含对象,这个功能是取得request.getParameter参数值的。

[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]

10.13 EL中与生存期有关的对象

在Servlet文件中:

// 与生存期有关的隐含对象pageScope,requestScope,
sessionScope,applicationScope
String username_request = "gaohongyan in request";
request.setAttribute("username_request", username_request);


把对象存到request作用域中了。

在JSP文件中:

与生存期有关的隐含对象pageScope,requestScope,sessionScope,applicationScope:
<br />
${requestScope.username_request} -$
{sessionScope.username_request}-
显示结果为:
与生存期有关的隐含对象pageScope,requestScope,
sessionScope,applicationScope:
gaohongyan in request --


很明显地显示出了在requestScope中的username_request的内容。由于sessionScope作用域中根本没有username_request,所以显示为空。
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]

10.14 JSTL中c:set标签body属性的使用示例

在JSP文件中:

JSTL的c:set标签的使用情况1(无BODY):
<c:set var="str_var" value="gaohongyan"></c:set>
${str_var}
<br />
JSTL的c:set标签的使用情况2(有BODY):
<c:set var="str_var_inbody">gaohongyan in body</c:set>
${str_var_inbody}
<br />


c:set标签的功能是声明一个变量并且赋值,设置值的形式分为两种,一种是无BODY,值是从value属性中获得的;另一种是有BODY,值即从BODY中来。

显示结果为:
JSTL的c:set标签的使用情况1(无BODY):gaohongyan
JSTL的c:set标签的使用情况2(有BODY):gaohongyan in body


10.15 JSTL中c:if标签body属性的使用示例

在JSP文件中:
JSTL的c:if标签的使用情况1(无BODY):
<c:if test="${str_var=='gaohongyan'}" var="result_boolean"></c:if>
${result_boolean}
<br />
JSTL的c:if标签的使用情况2(有BODY):
<c:if test="${str_var=='gaohongyan'}" var="
result_boolean">hello beijing 2008</c:if>
${result_boolean}
<br />


<c:if>标签的作用相当于Java语言中的if语句,test属性即if语句中的条件,把boolean类型的结果存入var属性的变量中。如果有BODY的情况,则条件为真,并显示出BODY中的值。

显示结果为:
JSTL的c:if标签的使用情况1(无BODY):true
JSTL的c:if标签的使用情况2(有BODY):hello beijing 2008 true


【责任编辑:云霞 TEL:(010)68476606】

10.16 JSTL中的c:choose标签的示例

在JSP文件中:

相当于switch语句的c:choose标签:
<c:choose>
<c:when test="${str_var=='gaohongyan'}">value is gaohongyan</c:when>
<c:when test="${str_var=='gaohongyan1'}">value is gaohongyan1</c:when>
<c:when test="${str_var=='gaohongyan2'}">value is gaohongyan2</c:when>
<c:otherwise>valuse is other</c:otherwise>
</c:choose>


如果某一个条件为真,则显示BODY中的内容,c:otherwise相当于switch语句中的default子句。

显示结果为:
相当于switch语句的c:choose标签:value is gaohongyan


10.17 使用JSTL中的c:forEach标签显示ArrayList中的String和bean属性的示例

在JSP文件中:
<br />
JSTL中的循环c:forEach标签(ArrayList:显示简单类型):
<br />
<c:forEach items="${al_simple_string}" var="item">${item}<br>
</c:forEach>
JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):
<br />
<c:forEach items="${al_simple_bean}" var="item">${item['username']}<br>
</c:forEach>


items属性即Collection或MAP接口对象,而var则是每循环一次当前集合中当前对象的实例,就通过EL表达式${item}显示出来。当然这只是局限显示String类型,而如果item是一个bean类型的话,还要加上${item['username']}属性。

显示结果为:
JSTL中的循环c:forEach标签(ArrayList:显示简单类型):
simple_string1
simple_string2
JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):
gaohongyan1
gaohongyan2


10.18 使用JSTL中的c:forEach标签显示HashMap中的String和bean属性的示例

在JSP文件中:

JSTL中的循环c:forEach标签(HashMap:显示简单类型):

<br />
<c:forEach items="${hm_simple_string}"
var="item">${item.key}:${item.value}<br>
</c:forEach>
JSTL中的循环c:forEach标签(HashMap:显示复杂类型):
<br />
<c:forEach items="${hm_complex}" var="
item">${item.value['username']}<br>
</c:forEach>


显示HashMap中的数据和显示ArrayList中的数据大体一样。第1种方式是通过key和value常量属性显示的,属于遍历类型的显示。而第2种方式是直接通过属性的值来取得数据的。

显示结果为:
JSTL中的循环c:forEach标签(HashMap:显示简单类型):
key1:value1
key2:value2
JSTL中的循环c:forEach标签(HashMap:显示复杂类型):
Student_complex


[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]

10.19 使用JSTL标签和EL表达式

实现隔行显示不同颜色的效果

在Servlet文件中:

ArrayList db_list = new ArrayList();
Student db_Student1 = new Student();
db_Student1.setUsername("gaohongyan1");

Student db_Student2 = new Student();
db_Student2.setUsername("gaohongyan2");

Student db_Student3 = new Student();
db_Student3.setUsername("gaohongyan3");

Student db_Student4 = new Student();
db_Student4.setUsername("gaohongyan4");

Student db_Student5 = new Student();
db_Student5.setUsername("gaohongyan5");

db_list.add(db_Student1);
db_list.add(db_Student2);
db_list.add(db_Student3);
db_list.add(db_Student4);
db_list.add(db_Student5);

request.setAttribute("db_list", db_list);


在JSP文件中:

隔行显示不同的颜色:
<br />
<table width="200" border="1">
<tr bgcolor="#FF0000">
<td width="89">
<div align="center">
id
</div>
</td>
<td width="95">
<div align="center">
value
</div>
</td>
</tr>
<c:forEach items="${db_list}" var="db_bean" varStatus="status_var">
<c:if test="${status_var.index % 2 ==0}">
<tr>
<td>
${status_var.index+1}
</td>
<td>
${db_bean['username'] }
</td>
</tr>
</c:if>
<c:if test="${status_var.index % 2 !=0}">
<tr bgcolor="#999999">
<td>
${status_var.index+1}
</td>
<td>
${db_bean['username'] }
</td>
</tr>
</c:if>
</c:forEach>

</table>


这个效果主要是使用了c:forEach标签中的varStatus属性来获取。隔行显示不同颜色的原理主要是index为奇数或偶数,这就需要在每次遍历时将当前显示的index的索引值取出来,再用<c:if>标签进行判断,就可以实现隔行显示不同颜色的效果了。

显示结果如图10-2所示。


图10-2 隔行显示不同的颜色
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]

10.20 使用JSTL标签和EL表达式

显示嵌套情况的数据

在Servlet文件中:
ArrayList al = new ArrayList();
al.add(new aaa());
request.setAttribute("al", al);
aaa类的代码如下:
import ghy_jstl.Student; import java.util.HashMap; public class aaa { HashMap hp = new HashMap(); public aaa() { super(); Student s = new Student(); s.setUsername("ly"); hp.put("key", s); } public HashMap getHp() { return hp; } public void setHp(HashMap hp) { this.hp = hp; } }


在JSP文件中:
<c:out value="${al[0]['hp']['key']['username']}"></c:out>


显示结果为:
ly


【责任编辑:云霞 TEL:(010)68476606】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: