JSTL核心标签库和EL表达式的联合使用
2014-03-03 19:29
627 查看
10.1 JSTL+EL+Servlet的示例(1)
先来了解一下在Servlet中要做什么样的任务吧。
(1)Servlet代码如下:
10.1 JSTL+EL+Servlet的示例(2)
(2)工具类Student类代码如下:
(3)工具类aaa类代码如下:
(4)JSP代码如下:
【责任编辑:云霞 TEL:(010)68476606】
10.1 JSTL+EL+Servlet的示例(3)
(5)程序在IE中输出的结果如下:
隔行显示不同颜色,如图10-1所示。
通过在Servlet中转发219.jsp文件用JSTL和EL表达式把数据显示在IE中。
10.2 使用EL表达式显示String类型变量的示例
在Servlet文件中使用以下代码:将String变量存入到request作用域中。
在JSP文件中:使用simple_string_username value=${simple_string_username }显示request中的变量simple_string_username,而这个变量是在Servlet中存入request的。
EL表达式的使用非常简单,格式为"${}",大括号"{}"中为表达式,在本例中是在request作用域中的字符串变量。
显示结果为:
10.3 使用EL表达式显示ArrayList存储String类型变量的示例
在Servlet文件中:
在JSP文件中:
因为变量al_simple_string是一个数组列表类型(ArrayList),其中存储的是String类型数据值。可以通过像Java语言的下标的形式取出指定下标元素的数据值,并显示出来。
显示结果为:
10.4 使用EL表达式显示ArrayList存储bean类类型变量的示例
在Servlet文件中:
ArrayList里面存储的是bean的实例,即复杂数据类型。Student的代码在前面已经列出,其实是一个只有username和age属性的class,并且有对应的set和get方法。
在JSP文件中:
由于al_simple_bean是ArrayList类型,并且每一个位置存储的是一个bean,所以想访问username必须取得每一个ArrayList元素中的bean,这样可以通过下载的方法来取得。通过下标得出的数据类型是一个Student类的实例,然后就可以通过方括号里面带单引号([''])的形式来访问bean的property属性了。
显示结果为:
10.5 使用JSTL中的c:out标签显示String类型变量的示例
在Servlet文件中:
在JSP文件中:
<c:out>标签是JSTL的核心标签库中的一员,使用非常普遍且非常简单。在本示例中只使用c:out标签的value属性,value属性值的来源是EL表达式,通过EL表达式取出变量c_out_simple_string的值赋给c:out标签的value属性,然后通过c:out标签显示出来。
显示结果为:
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]
10.6 使用JSTL标签显示bean中属性的示例
在Servlet文件中:
将Student的实例存放到request作用域中。
在JSP文件中:
由于Student_complex是一个bean的实例,要想访问bean的属性,只需要使用方括号加单引号(如['propertyName'])的形式来访问属性的值,自动调用属性的get方法,然后通过c:out标签显示出来。
显示结果为:
c_out输出复杂类型的属性值为:Student_complex
10.7 使用JSTL标签对null和""在默认值上的区别
在Servlet文件中2个变量的值分别为null和"":
在JSP文件中:
default_null的值是:
default_nil的值是:
用BODY来代替default属性:
从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标签显示出在线编辑器的代码:
在这里只是模拟从数据库中将在线编辑器中的内容赋值给一个String变量,然后将这个变量放到request中,准备显示出来。
在JSP文件中:
在这里使用c:out标签的escapeXml属性来进行"< >"符号的转义,要设置为false。
显示结果为:
代码www.sohu.com在IE中是一个超级链接。
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]
10.9 使用JSTL标签和EL表达式通过变量显示属性的值
在Servlet文件中:
在JSP文件中:
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文件中:
在JSP文件中:
在JSP文件中,hm_simple_string是一个HashMap实例,Map是一个以key键value值配对的数据结构。通过key显示出value,这样就可以直接使用['key_name']的形式显示出指定key所对应的value了。
显示结果为:
通过EL表达式获取HashMap简单的内容value1
10.11 使用JSTL标签和EL表达式显示HashMap中bean属性的值
在Servlet文件中:
HashMap存放的是一个类class的实例。
在JSP文件中:
hm_complex是一个HashMap类型,通过key可以取得value。但value是一个bean类型,所以就需要先通过['key1']来取得指定key所对应的value,再通过['username']来访问bean的username属性,并显示出来。
显示结果为:
通过EL表达式取HashMap复杂的内容:Student_complex
10.12 EL表达式中的保留字
在JSP文件中:
EL中的保留字and:
显示结果为:
在这个示例中,需要注意的是保留字null和empty在处理null和""上的区别,这点在真实的软件项目中经常遇到,一定要掌握这个技能点。
还有一个是param隐含对象,这个功能是取得request.getParameter参数值的。
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]
10.13 EL中与生存期有关的对象
在Servlet文件中:
把对象存到request作用域中了。
在JSP文件中:
与生存期有关的隐含对象pageScope,requestScope,sessionScope,applicationScope:
很明显地显示出了在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标签的功能是声明一个变量并且赋值,设置值的形式分为两种,一种是无BODY,值是从value属性中获得的;另一种是有BODY,值即从BODY中来。
显示结果为:
10.15 JSTL中c:if标签body属性的使用示例
在JSP文件中:
<c:if>标签的作用相当于Java语言中的if语句,test属性即if语句中的条件,把boolean类型的结果存入var属性的变量中。如果有BODY的情况,则条件为真,并显示出BODY中的值。
显示结果为:
【责任编辑:云霞 TEL:(010)68476606】
10.16 JSTL中的c:choose标签的示例
在JSP文件中:
相当于switch语句的c:choose标签:
如果某一个条件为真,则显示BODY中的内容,c:otherwise相当于switch语句中的default子句。
显示结果为:
10.17 使用JSTL中的c:forEach标签显示ArrayList中的String和bean属性的示例
在JSP文件中:
items属性即Collection或MAP接口对象,而var则是每循环一次当前集合中当前对象的实例,就通过EL表达式${item}显示出来。当然这只是局限显示String类型,而如果item是一个bean类型的话,还要加上${item['username']}属性。
显示结果为:
10.18 使用JSTL中的c:forEach标签显示HashMap中的String和bean属性的示例
在JSP文件中:
JSTL中的循环c:forEach标签(HashMap:显示简单类型):
显示HashMap中的数据和显示ArrayList中的数据大体一样。第1种方式是通过key和value常量属性显示的,属于遍历类型的显示。而第2种方式是直接通过属性的值来取得数据的。
显示结果为:
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]
10.19 使用JSTL标签和EL表达式
实现隔行显示不同颜色的效果
在Servlet文件中:
在JSP文件中:
隔行显示不同的颜色:
这个效果主要是使用了c:forEach标签中的varStatus属性来获取。隔行显示不同颜色的原理主要是index为奇数或偶数,这就需要在每次遍历时将当前显示的index的索引值取出来,再用<c:if>标签进行判断,就可以实现隔行显示不同颜色的效果了。
显示结果如图10-2所示。
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]
10.20 使用JSTL标签和EL表达式
显示嵌套情况的数据
在Servlet文件中:
在JSP文件中:
显示结果为:
【责任编辑:云霞 TEL:(010)68476606】
先来了解一下在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 隔行显示不同颜色 |
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 隔行显示不同的颜色 |
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】
相关文章推荐
- JSTL 核心标签库 使用
- JSTL 核心标签库 使用
- 【转】JSTL 核心标签库 使用
- JSTL使用总结(1) 核心标签库和SQL标签库
- JSTL 核心标签库 使用
- jstl的使用(二):核心标签库之表达式控制标签
- el表达式保留两位小数、使用jstl <fmt:formatNumber>标签保留两位小数
- JSTL 核心标签库 使用
- JSTL 核心标签库 使用
- JSTL 核心标签库使用(转)
- jstl核心标签使用
- JSTL 核心标签库 使用
- el表达式保留两位小数、使用jstl <fmt:formatNumber>标签保留两位小数
- el表达式保留两位小数、使用jstl <fmt:formatNumber>标签保留两位小数
- [置顶] JSTL 核心标签库 使用
- JSTL 核心标签库 使用 (转)
- JSTL 核心标签库 使用
- JSTL核心标签库的使用
- JSTL 核心标签库 使用
- 引用 JAVA标签库JSTL-EL表达式介绍使用配置手册