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>
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 隔行显示不同颜色 |
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
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。
显示结果为:
代码www.sohu.com在IE中是一个超级链接。
- 使用c:out标签显示出在线编辑器的代码:www.sohu.com
- 使用c:out标签显示jstl标记(1):out
- 使用c:out标签显示jstl标记(2):out
- EL表达式的计算+-*/%:4
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
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参数值的。
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,所以显示为空。
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
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
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 隔行显示不同的颜色 |
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