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

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

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

(1)Servlet代码如下:

 
 
  1. import ghy_jstl.Student;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. public class jstl_servlet extends HttpServlet {
  11. public jstl_servlet() {
  12. super();
  13. }
  14. public void destroy() {
  15. super.destroy();
  16. }
  17. public void doGet(HttpServletRequest request,
    HttpServletResponse response)
  18. throws ServletException, IOException {
  19. // 放入String类型
  20. String simple_string_username = "gaohongyan";
  21. request.setAttribute("simple_string_username",
    simple_string_username);
  22. // 往AL中放入String类型
  23. ArrayList al_simple_string = new ArrayList();
  24. al_simple_string.add("simple_string1");
  25. al_simple_string.add("simple_string2");
  26. request.setAttribute("al_simple_string", al_simple_string);
  27. // 往AL中放入复杂类型(BEAN)
  28. Student Student1 = new Student();
  29. Student1.setUsername("gaohongyan1");
  30. Student Student2 = new Student();
  31. Student2.setUsername("gaohongyan2");
  32. ArrayList al_simple_bean = new ArrayList();
  33. al_simple_bean.add(Student1);
  34. al_simple_bean.add(Student2);
  35. request.setAttribute("al_simple_bean", al_simple_bean);
  36. // 放入String类型,使用c:out输出
  37. String c_out_simple_string = "hello beijing 2008";
  38. request.setAttribute("c_out_simple_string",
    c_out_simple_string);
  39. // 往request中放入复杂类型
  40. Student Student_complex = new Student();
  41. Student_complex.setUsername("Student_complex");
  42. request.setAttribute("Student_complex", Student_complex);
  43. // default_null default_nil的情况
  44. String default_null = null;
  45. String default_nil = "";
  46. request.setAttribute("default_null", default_null);
  47. request.setAttribute("default_nil", default_nil);
  48. // fckeditor在线编辑器内容的输出
  49. String fckeditor = "com>www.sohu.com";
  50. request.setAttribute("fckeditor", fckeditor);
  51. // 通过变量的值来访问属性的EL实例
  52. String var_name = "username";
  53. request.setAttribute("var_name", var_name);
  54. // 通过EL表达式获取HashMap简单的内容
  55. HashMap hm_simple_string = new HashMap();
  56. hm_simple_string.put("key1", "value1");
  57. hm_simple_string.put("key2", "value2");
  58. request.setAttribute("hm_simple_string", hm_simple_string);
  59. // 通过EL表达式获取HashMap复杂的内容
  60. HashMap hm_complex = new HashMap();
  61. hm_complex.put("key1", Student_complex);
  62. request.setAttribute("hm_complex", hm_complex);
  63. // 与生存期有关的隐含对象pageScope,requestScope,
    sessionScope,applicationScope
  64. String username_request = "gaohongyan in request";
  65. request.setAttribute("username_request", username_request);
  66. // 嵌套式
  67. ArrayList db_list = new ArrayList();
  68. Student db_Student1 = new Student();
  69. db_Student1.setUsername("gaohongyan1");
  70. Student db_Student2 = new Student();
  71. db_Student2.setUsername("gaohongyan2");
  72. Student db_Student3 = new Student();
  73. db_Student3.setUsername("gaohongyan3");
  74. Student db_Student4 = new Student();
  75. db_Student4.setUsername("gaohongyan4");
  76. Student db_Student5 = new Student();
  77. db_Student5.setUsername("gaohongyan5");
  78. db_list.add(db_Student1);
  79. db_list.add(db_Student2);
  80. db_list.add(db_Student3);
  81. db_list.add(db_Student4);
  82. db_list.add(db_Student5);
  83. request.setAttribute("db_list", db_list);
  84. ArrayList al = new ArrayList();
  85. al.add(new aaa());
  86. request.setAttribute("al", al);
  87. request.getRequestDispatcher("/219.jsp").
    forward(request, response);
  88. }
  89. public void doPost(HttpServletRequest request,
    HttpServletResponse response)
  90. throws ServletException, IOException {
  91. }
  92. public void init() throws ServletException {
  93. }
  94. }

 

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

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

  
  
  1. package ghy_jstl;  
  2.  
  3. public class Student {  
  4.  
  5.     String username;  
  6.     int age;  
  7.  
  8.     public String getUsername() {  
  9.         return username;  
  10.     }  
  11.  
  12.     public void setUsername(String username) {  
  13.         this.username = username;  
  14.     }  
  15.  
  16.     public int getAge() {  
  17.         return age;  
  18.     }  
  19.  
  20.     public void setAge(int age) {  
  21.         this.age = age;  
  22.     }  
  23.  

(3)工具类aaa类代码如下:

  
  
  1. import ghy_jstl.Student;  
  2.  
  3. import java.util.HashMap;  
  4.  
  5.  
  6. public class aaa {  
  7.     HashMap hp = new HashMap();  
  8.  
  9.     public aaa() {  
  10.         super();  
  11.         Student s = new Student();  
  12.         s.setUsername("ly");  
  13.         hp.put("key", s);  
  14.     }  
  15.  
  16.     public HashMap getHp() {  
  17.         return hp;  
  18.     }  
  19.  
  20.     public void setHp(HashMap hp) {  
  21.         this.hp = hp;  
  22.     }  

(4)JSP代码如下:

  
  
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   
  4. "http://www.w3.org/TR/html4/loose.dtd">  
  5. <%@ page isELIgnored="false"%>  
  6. <html>  
  7.     <body>  
  8.         s imple_string_username value=${simple_string_username }  
  9.         <br />  
  10.         <br>  
  11.         al_simple_string[0]=${al_simple_string[0]}  
  12.         <br />  
  13.         al_simple_string[1]=${al_simple_string[1]}  
  14.         <br />  
  15.         al_simple_bean[0]的username的值:${al_simple_bean[0]['username']}  
  16.         <br />  
  17.         al_simple_bean[1]的username的值:${al_simple_bean[1]['username']}  
  18.         <br />  
  19.         al_simple_bean[0]的age的值:${al_simple_bean[0]['age']}  
  20.         <br />  
  21.         c_out_simple_string的值是:  
  22.         <c:out value="${c_out_simple_string}"></c:out>  
  23.         <br />  
  24.         c_out输出复杂类型的属性值为:  
  25.         <c:out value="${Student_complex['username']}"></c:out>  
  26.         <br />  
  27.         default_null的值是:  
  28.         <c:out value="${default_null}" default="this is null"></c:out>  
  29.         <br />  
  30.         default_nil的值是:  
  31.         <c:out value="${default_nil}" default="this is nil"></c:out>  
  32.         <br />  
  33.         使用BODY来代替default属性:  
  34.         <c:out value="${default_null}">this is null too</c:out>  
  35.         <br />  
  36.         使用c:out标签显示出在线编辑器的代码:  
  37.         <c:out value="${fckeditor}" escapeXml="false"></c:out>  
  38.         <br />  
  39.         使用c:out标签显示jstl标记(1):  
  40.         <c:out value="<c:out>out</out>" escapeXml="false"></c:out>  
  41.         <br />  
  42.         使用c:out标签显示jstl标记(2):  
  43.         <c:out value="<c:out>out</out>"></c:out>  
  44.         <br />  
  45.         EL表达式的计算+-*/%:  
  46.         <c:out value="${3+1}"></c:out>  
  47.         <br />  
  48.         通过变量的值来访问属性的EL实例:  
  49.         <c:out value="${Student_complex[var_name]}"></c:out>  
  50.         <br />  
  51.         通过EL表达式获取HashMap简单的内容:  
  52.         <c:out value="${hm_simple_string['key1']}"></c:out>  
  53.         <br />  
  54.         通过EL表达式获取HashMap复杂的内容:  
  55.         <c:out value="${hm_complex['key1']['username']}"></c:out>  
  56.         <br />  
  57.         EL中的保留字and:  
  58.         <c:out value="${true and true}"></c:out>  
  59.         <c:out value="${true and false}"></c:out>  
  60.         <br />  
  61.         EL中的保留字or:  
  62.         <c:out value="${true or true}"></c:out>  
  63.         <c:out value="${true or false}"></c:out>  
  64.         <br />  
  65.         EL中的保留字not:  
  66.         <c:out value="${not true}"></c:out>  
  67.         <c:out value="${not false}"></c:out>  
  68.         <br />  
  69.         EL中的保留字null:  
  70.         <c:out value="${default_null==null}"></c:out>  
  71.         <c:out value="${default_nil==null}"></c:out>  
  72.         <br />  
  73.         EL中的保留字mod:  
  74.         <c:out value="${5 mod 3}"></c:out>  
  75.         <br />  
  76.         EL表达式的empty运算符:  
  77.         <c:out value="${empty default_null}"></c:out>  
  78.         <c:out value="${empty default_nil}"></c:out>  
  79.         <br />  
  80.         与参数有关的隐含对象param:${param.username}  
  81.         <br />  
  82.         与生存期有关的隐含对象pageScope,requestScope,sessionScope,applicationScope:  
  83.         <br />  
  84.         ${requestScope.username_request} -${sessionScope.username_request}-  
  85.         <br />  
  86.         JSTL的c:set标签的使用情况1(无BODY):  
  87.         <c:set var="str_var" value="gaohongyan"></c:set>  
  88.         ${str_var}  
  89.         <br />  
  90.         JSTL的c:set标签的使用情况1(有BODY):  
  91.         <c:set var="str_var_inbody">gaohongyan in body</c:set>  
  92.         ${str_var_inbody}  
  93.         <br />  
  94.         JSTL的c:if标签的使用情况1(无BODY):  
  95.         <c:if test="${str_var=='gaohongyan'}" var="result_boolean"></c:if>  
  96.         ${result_boolean}  
  97.         <br />  
  98.         JSTL的c:if标签的使用情况1(有BODY):  
  99.         <c:if test="${str_var=='gaohongyan'}" var="
    result_boolean"
    >hello beijing 2008</c:if>  
  100.         ${result_boolean}  
  101.         <br />  
  102.         相当于switch语句的<c:choose>标签:  
  103.         <c:choose>  
  104.             <c:when test="${str_var=='gaohongyan'}">value 
    is gaohongyan</c:when>  
  105.             <c:when test="${str_var=='gaohongyan1'}">value 
    is gaohongyan1</c:when>  
  106.             <c:when test="${str_var=='gaohongyan2'}">value 
    is gaohongyan2</c:when>  
  107.             <c:otherwise>valuse is other</c:otherwise>  
  108.         </c:choose>  
  109.         <br />  
  110.         JSTL中的循环c:forEach标签(ArrayList:显示简单类型):  
  111.         <br />  
  112.         <c:forEach items="${al_simple_string}" var="item">${item}<br>  
  113.         </c:forEach>  
  114.         JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):  
  115.         <br />  
  116.         <c:forEach items="${al_simple_bean}" var="item">
    ${item[
    'username']}<br>  
  117.         </c:forEach>  
  118.         JSTL中的循环c:forEach标签(HashMap:显示简单类型):  
  119.         <br />  
  120.         <c:forEach items="${hm_simple_string}" var="item"
    >${item.key}:${item.value}<br>  
  121.         </c:forEach>  
  122.         JSTL中的循环c:forEach标签(HashMap:显示复杂类型):  
  123.         <br />  
  124.         <c:forEach items="${hm_complex}" var="item">
    ${item.value[
    'username']}<br>  
  125.         </c:forEach>  
  126.         <br />  
  127.         隔行显示不同颜色:  
  128.         <br />  
  129.         <table width="200" border="1">  
  130.             <tr bgcolor="#FF0000">  
  131.                 <td width="89">  
  132.                     <div align="center">  
  133.                         id  
  134.                     </div>  
  135.                 </td>  
  136.                 <td width="95">  
  137.                     <div align="center">  
  138.                         value  
  139.                     </div>  
  140.                 </td>  
  141.             </tr>  
  142.             <c:forEach items="${db_list}" var="db_bean"
     varStatus="status_var">  
  143.                 <c:if test="${status_var.index % 2 ==0}">  
  144.                     <tr>  
  145.                         <td>  
  146.                             ${status_var.index+1}  
  147.                         </td>  
  148.                         <td>  
  149.                             ${db_bean['username'] }  
  150.                         </td>  
  151.                     </tr>  
  152.                 </c:if>  
  153.                 <c:if test="${status_var.index % 2 !=0}">  
  154.                     <tr bgcolor="#999999">  
  155.                         <td>  
  156.                             ${status_var.index+1}  
  157.                         </td>  
  158.                         <td>  
  159.                             ${db_bean['username'] }  
  160.                         </td>  
  161.                     </tr>  
  162.                 </c:if>  
  163.             </c:forEach>  
  164.  
  165.         </table>  
  166.  
  167.         <c:out value="${al[0]['hp']['key']['username']}"></c:out>  
  168.     </body>  
  169. </html> 

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

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

(5)程序在IE中输出的结果如下:

  
  
  1. s imple_string_username value=gaohongyan   
  2. al_simple_string[0]=simple_string1   
  3. al_simple_string[1]=simple_string2   
  4. al_simple_bean[0]的username的值:gaohongyan1   
  5. al_simple_bean[1]的username的值:gaohongyan2   
  6. al_simple_bean[0]的age的值:0   
  7. c_out_simple_string的值是:hello beijing 2008   
  8. c_out输出复杂类型的属性值为:Student_complex   
  9. default_null的值是:this is null   
  10. default_nil的值是:this is nil  
  11. 使用BODY来代替default属性:this is null too   
  12. 使用c:out标签显示出在线编辑器的代码:www.sohu.com   
  13. 使用c:out标签显示jstl标记(1):out   
  14. 使用c:out标签显示jstl标记(2):<c:out>out</out>   
  15. EL表达式的计算+-*/%:4   
  16. 通过变量的值来访问属性的EL实例:Student_complex   
  17. 通过EL表达式获取HashMap简单的内容:value1   
  18. 通过EL表达式获取HashMap复杂的内容:Student_complex   
  19. EL中的保留字and:true false   
  20. EL中的保留字or:true true   
  21. EL中的保留字not:false true   
  22. EL中的保留字nulltrue false   
  23. EL中的保留字mod:2   
  24. EL表达式的empty运算符:true true   
  25. 与参数有关的隐含对象param:${param.username}  
  26. 与生存期有关的隐含对象pageScope,requestScope,sessionScope,applicationScope:  
  27. gaohongyan in request --   
  28. JSTL的c:set标签的使用情况1(无BODY):gaohongyan  
  29. JSTL的c:set标签的使用情况1(有BODY):gaohongyan in body  
  30. JSTL的c:if标签的使用情况1(无BODY):true 
  31. JSTL的c:if标签的使用情况1(有BODY):hello beijing 2008 true 
  32. 相当于switch语句的c:choose标签:value is gaohongyan  
  33. JSTL中的循环c:forEach标签(ArrayList:显示简单类型):  
  34. simple_string1  
  35. simple_string2  
  36. JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):   
  37. gaohongyan1  
  38. gaohongyan2  
  39. JSTL中的循环c:forEach标签(HashMap:显示简单类型):  
  40. key1:value1  
  41. key2:value2  
  42. JSTL中的循环c:forEach标签(HashMap:显示复杂类型):  
  43. Student_complex 

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

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

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

在Servlet文件中使用以下代码:将String变量存入到request作用域中。

  
  
  1. String simple_string_username = "gaohongyan";  
  2. request.setAttribute("simple_string_username", simple_string_username); 

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

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

显示结果为:

  
  
  1. simple_string_username value=gaohongyan 

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

在Servlet文件中:

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

在JSP文件中:

  
  
  1. al_simple_string[0]=${al_simple_string[0]}  
  2. al_simple_string[1]=${al_simple_string[1]} 

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

显示结果为:

  
  
  1. al_simple_string[0]=simple_string1   
  2. al_simple_string[1]=simple_string2 

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

在Servlet文件中:

  
  
  1. // 往AL中放入复杂类型(bean)  
  2.     Student Student1 = new Student();  
  3.     Student1.setUsername("gaohongyan1");  
  4.  
  5.     Student Student2 = new Student();  
  6.     Student2.setUsername("gaohongyan2");  
  7.  
  8.     ArrayList al_simple_bean = new ArrayList();  
  9.     al_simple_bean.add(Student1);  
  10.     al_simple_bean.add(Student2);  
  11.     request.setAttribute("al_simple_bean", al_simple_bean); 

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

在JSP文件中:

  
  
  1. al_simple_bean[0]的username的值:${al_simple_bean[0]['username']}  
  2. al_simple_bean[1]的username的值:${al_simple_bean[1]['username']}  
  3. al_simple_bean[0]的age的值:${al_simple_bean[0]['age']} 

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

显示结果为:

  
  
  1. al_simple_bean[0]的username的值:gaohongyan1   
  2. al_simple_bean[1]的username的值:gaohongyan2   
  3. al_simple_bean[0]的age的值:0 

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

在Servlet文件中:

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

在JSP文件中:

  
  
  1. c_out_simple_string的值是:  
  2. <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标签显示出来。

显示结果为:

  
  
  1. c_out_simple_string的值是: hello beijing 200 

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

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

在Servlet文件中:

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

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

在JSP文件中:

  
  
  1. 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和"":

   
   
  1. // default_null default_nil的情况  
  2. String default_null = null;  
  3. String default_nil = "";  
  4. request.setAttribute("default_null", default_null);  
  5. request.setAttribute("default_nil", default_nil); 

在JSP文件中:

default_null的值是:

   
   
  1. <c:out value="${default_null}" default="this is null"></c:out>  
  2. <br /> 

default_nil的值是:

   
   
  1. <c:out value="${default_nil}" default="this is nil"></c:out>  
  2. <br /> 

用BODY来代替default属性:

   
   
  1. <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标签显示出在线编辑器的代码:

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

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

在JSP文件中:

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

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

显示结果为:

   
   
  1. 使用c:out标签显示出在线编辑器的代码:www.sohu.com   
  2. 使用c:out标签显示jstl标记(1):out   
  3. 使用c:out标签显示jstl标记(2):out   
  4. EL表达式的计算+-*/%:4 
代码www.sohu.com在IE中是一个超级链接。

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

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

在Servlet文件中:

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

在JSP文件中:

   
   
  1. //通过变量的值来访问属性的EL实例  
  2. <c:out value=< span="">"${Student_complex[var_name]}"> 

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

显示结果为:

通过变量的值来访问属性的EL实例: Student_complex

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

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

在Servlet文件中:

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

在JSP文件中:

  
  
  1. //通过EL表达式获取HashMap简单的内容:  
  2. <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文件中:

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

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

在JSP文件中:

  
  
  1. //通过EL表达式取HashMap复杂的内容  
  2. <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:

  
  
  1. <c:out value="${true and true}"></c:out>  
  2. <c:out value="${true and false}"></c:out>  
  3. <br />  
  4. EL中的保留字or:  
  5. <c:out value="${true or true}"></c:out>  
  6. <c:out value="${true or false}"></c:out>  
  7. <br />  
  8. EL中的保留字not:  
  9. <c:out value="${not true}"></c:out>  
  10. <c:out value="${not false}"></c:out>  
  11. <br />  
  12. EL中的保留字null:  
  13. <c:out value="${default_null==null}"></c:out>  
  14. <c:out value="${default_nil==null}"></c:out>  
  15. <br />  
  16. EL中的保留字mod:  
  17. <c:out value="${5 mod 3}"></c:out>  
  18. <br />  
  19. EL表达式的empty运算符:  
  20. <c:out value="${empty default_null}"></c:out>  
  21. <c:out value="${empty default_nil}"></c:out>  
  22. <br />  
  23. 与参数有关的隐含对象param:${param.username} 

显示结果为:

  
  
  1. EL中的保留字and:true false   
  2. EL中的保留字or:true true   
  3. EL中的保留字not:false true   
  4. EL中的保留字nulltrue false   
  5. EL中的保留字mod:2   
  6. EL表达式的empty运算符:true true 
  7. 与参数有关的隐含对象param:${param.username} 

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

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

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

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

在Servlet文件中:

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

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

在JSP文件中:

与生存期有关的隐含对象pageScope,requestScope,sessionScope,applicationScope:

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

很明显地显示出了在requestScope中的username_request的内容。由于sessionScope作用域中根本没有username_request,所以显示为空。

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

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

在JSP文件中:

JSTL的c:set标签的使用情况1(无BODY):

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

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

显示结果为:

  
  
  1. JSTL的c:set标签的使用情况1(无BODY):gaohongyan   
  2. JSTL的c:set标签的使用情况2(有BODY):gaohongyan in body 

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

在JSP文件中:

  
  
  1. JSTL的c:if标签的使用情况1(无BODY):  
  2. <c:if test="${str_var=='gaohongyan'}" var="result_boolean"></c:if>  
  3. ${result_boolean}  
  4. <br />  
  5. JSTL的c:if标签的使用情况2(有BODY):  
  6. <c:if test="${str_var=='gaohongyan'}" var="
    result_boolean"
    >hello beijing 2008</c:if>  
  7. ${result_boolean}  
  8. <br /> 

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

显示结果为:

  
  
  1. JSTL的c:if标签的使用情况1(无BODY):true   
  2. JSTL的c:if标签的使用情况2(有BODY):hello beijing 2008 true 

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

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

在JSP文件中:

相当于switch语句的c:choose标签:

  
  
  1. <c:choose>  
  2.     <c:when test="${str_var=='gaohongyan'}">value is gaohongyan</c:when>  
  3.     <c:when test="${str_var=='gaohongyan1'}">value is gaohongyan1</c:when>  
  4.     <c:when test="${str_var=='gaohongyan2'}">value is gaohongyan2</c:when>  
  5.     <c:otherwise>valuse is other</c:otherwise>  
  6. </c:choose> 

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

显示结果为:

  
  
  1. 相当于switch语句的c:choose标签:value is gaohongyan 

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

在JSP文件中:

  
  
  1. <br />  
  2. JSTL中的循环c:forEach标签(ArrayList:显示简单类型):  
  3. <br />  
  4. <c:forEach items="${al_simple_string}" var="item">${item}<br>  
  5. </c:forEach>  
  6. JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):  
  7. <br />  
  8. <c:forEach items="${al_simple_bean}" var="item">${item['username']}<br>  
  9. </c:forEach> 

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

显示结果为:

  
  
  1. JSTL中的循环c:forEach标签(ArrayList:显示简单类型):   
  2. simple_string1  
  3. simple_string2  
  4. JSTL中的循环c:forEach标签(ArrayList:显示复杂类型):   
  5. gaohongyan1  
  6. gaohongyan2 

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

在JSP文件中:

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

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

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

显示结果为:

   
   
  1. JSTL中的循环c:forEach标签(HashMap:显示简单类型):   
  2. key1:value1  
  3. key2:value2  
  4. JSTL中的循环c:forEach标签(HashMap:显示复杂类型):   
  5. Student_complex 

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

10.19  使用JSTL标签和EL表达式

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

在Servlet文件中:

   
   
  1. ArrayList db_list = new ArrayList();  
  2. Student db_Student1 = new Student();  
  3. db_Student1.setUsername("gaohongyan1");  
  4.  
  5. Student db_Student2 = new Student();  
  6. db_Student2.setUsername("gaohongyan2");  
  7.  
  8. Student db_Student3 = new Student();  
  9. db_Student3.setUsername("gaohongyan3");  
  10.  
  11. Student db_Student4 = new Student();  
  12. db_Student4.setUsername("gaohongyan4");  
  13.  
  14. Student db_Student5 = new Student();  
  15. db_Student5.setUsername("gaohongyan5");  
  16.  
  17. db_list.add(db_Student1);  
  18. db_list.add(db_Student2);  
  19. db_list.add(db_Student3);  
  20. db_list.add(db_Student4);  
  21. db_list.add(db_Student5);  
  22.  
  23. request.setAttribute("db_list", db_list); 

在JSP文件中:

隔行显示不同的颜色:

   
   
  1. <br />  
  2. <table width="200" border="1">  
  3.     <tr bgcolor="#FF0000">  
  4.         <td width="89">  
  5.             <div align="center">  
  6.                 id  
  7.             </div>  
  8.         </td>  
  9.         <td width="95">  
  10.             <div align="center">  
  11.                 value  
  12.             </div>  
  13.         </td>  
  14.     </tr>  
  15.     <c:forEach items="${db_list}" var="db_bean" varStatus="status_var">  
  16.         <c:if test="${status_var.index % 2 ==0}">  
  17.             <tr>  
  18.                 <td>  
  19.                     ${status_var.index+1}  
  20.                 </td>  
  21.                 <td>  
  22.                     ${db_bean['username'] }  
  23.                 </td>  
  24.             </tr>  
  25.         </c:if>  
  26.         <c:if test="${status_var.index % 2 !=0}">  
  27.             <tr bgcolor="#999999">  
  28.                 <td>  
  29.                     ${status_var.index+1}  
  30.                 </td>  
  31.                 <td>  
  32.                     ${db_bean['username'] }  
  33.                 </td>  
  34.             </tr>  
  35.         </c:if>  
  36.     </c:forEach>  
  37.  
  38. </table> 

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

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

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

10.20  使用JSTL标签和EL表达式

显示嵌套情况的数据

在Servlet文件中:

  
  
  1. ArrayList al = new ArrayList();  
  2. al.add(new aaa());  
  3. request.setAttribute("al", al);  
  4. aaa类的代码如下:  
  5. import ghy_jstl.Student;  
  6.  
  7. import java.util.HashMap;  
  8.  
  9.  
  10. public class aaa {  
  11.     HashMap hp = new HashMap();  
  12.  
  13.     public aaa() {  
  14.         super();  
  15.         Student s = new Student();  
  16.         s.setUsername("ly");  
  17.         hp.put("key", s);  
  18.     }  
  19.  
  20.     public HashMap getHp() {  
  21.         return hp;  
  22.     }  
  23.  
  24.     public void setHp(HashMap hp) {  
  25.         this.hp = hp;  
  26.     }  

在JSP文件中:

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

显示结果为:

  
  
  1. ly 

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值