jstl初识之旅:Core标签中的一般用途标签

来源:互联网 发布:淘宝学生春秋外套 编辑:程序博客网 时间:2024/04/30 07:52

Core标签中的一般用途标签及其作用:

<c:out>  网页中输出变量,表达式的值

<c:set>  设置命名变量值,如果命名变量为JavaBean 还能设定JavaBean的属性值;如果命名变量为Map,还能设定Map中key值对应

               的value

<c:remove> 命名变量移除

<c:catch>  捕获异常,并把异常对象放在指定的命名变量中

 

<c:out>标签:

<c:out>标签能够把一个表达式的结果打印到网页上,这个表达式可以为基于"<%= 和%>"形式的传统Java表达式,也可以是EL表达式。<c:out>标签的基本语法如下:

  1. <c:out value="表达式" /> 

<c:out>标签的value属性设定表达式。例如:

  1. <c:out value="${param.username}" /> 

以上代码打印username请求参数,如果username参数的值为null,就打印空字符串。以上代码的作用与单纯的EL表达式${param.username}等价。

<c:out>标签还可以采用以下两种方式设定默认值,如果表达式的值为null,<c:out>标签就打印默认值:

  1. <%--方式一:用default属性设定默认值--%> 
  2. <c:out value="表达式"  default="默认值" /> 
  3.  
  4. <%--方式二:用标签主体设定默认值--%> 
  5. <c:out value="表达式" > 
  6. 默认值  
  7. </c:out> 


例如例程15-1的out.jsp中的两个<c:out>标签的作用是等价的,它们的作用都是打印username请求参数,如果username参数的值为null,就打印"Unknown"。

例程15-1  out.jsp

  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
  2.  
  3. <%--第1个out标签--%> 
  4. <c:out value="${param.username}" default="unknown" /> 
  5.  
  6. &nbsp; &nbsp;  
  7.  
  8. <%--第2个out标签--%> 
  9. <c:out value="${param.username}"> 
  10.   unknown  
  11. </c:out> 

通过浏览器访问http://localhost:8080/helloapp/out.jsp,打印结果为"unknown unknown"。如果通过浏览器访问http://localhost:8080/helloapp/out.jsp?username=Tom,那么打印结果为"Tom Tom"。

 

 

<c:set>标签

<c:set>标签具有以下作用:

为String类型的命名变量设定值。

如果命名变量为JavaBean,那么为这个JavaBean对象的特定属性设定值。

如果命名变量为Map类型,那么为这Map对象中的特定Key设定值。

(1)为String类型的命名变量设定值

<c:set>标签在为特定范围内的String类型的命名变量设定值时,采用以下语法:

  1. <c:set var="命名变量的名字"  value="表达式"  scope="{page|request|session|  
  2. application}" /> 

以上scope属性指定范围的名字,可选值包括page、request、session和application, scope属性的默认值为page(页面范围)。

例如以下代码在会话范围内设置了一个user命名变量,它的值为"Tom",表达式${sessionScope.user}的打印结果为"Tom":

  1. <c:set var="user" value="Tom" scope="session" /> 
  2. ${sessionScope.user}  

以上代码中的<c:set>标签与以下Java程序片段的作用是等价的:

  1. <%  
  2. pageContext.setAttribute("user","Tom",PageContext.SESSION_SCOPE);  
  3. %> 

再例如以下代码在页面范围内设置了一个user属性,它的值为username请求参数的值:

  1. <c:set var="user" value="${param.username}" /> 

<c:set>标签的value属性用于设定命名变量的值,此外,也可以用标签主体来设定值。例如以下两段代码是等价的,它们都在会话范围内设置了一个user命名变量,该变量的值为"Tom":

  1. <%--代码1--%> 
  2. <c:set var="user" value="Tom" scope="session" /> 
  3.  
  4. <%--代码2--%> 
  5. <c:set var="user" scope="session" > 
  6. Tom  
  7. </c:set> 

(2)为特定范围内的JavaBean对象的属性设定属性值

<c:set>标签在为特定范围内的JavaBean对象的属性设定属性值时,采用以下语法:

  1. <c:set target="代表JavaBean的命名变量"  property=
    "JavaBean的属性名"  value="表达式"  /> 

例如以下代码先通过<jsp:useBean>标签定义了一个Web应用范围内的counterBean命名变量,接下来通过<c:set>标签把这个counterBean命名变量的count属性设为2,${counterBean.count}的打印结果为2:

  1. <%@ page import="mypack.CounterBean" %>     
  2. <jsp:useBean id="counterBean" scope="application"
     class="mypack.CounterBean" /> 
  3. <c:set target="${counterBean}" property="count" value="2" /> 
  4. ${counterBean.count}  

以上代码中的<c:set>标签与以下Java程序片段的作用是等价的:

  1. <%  
  2. CounterBean counterBean=(CounterBean)pageContext.findAttribute("counterBean");  
  3. counterBean.setCount(2);  
  4. %>  

(3)为特定范围内的Map对象的Key设定值

<c:set>标签在为特定范围内的Map对象的Key设定值时,采用以下语法:

  1. <c:set target="代表Map对象的命名变量"  property="key的名字"  value="表达式"  /> 

例如以下代码先通过<jsp:useBean>标签定义了一个请求范围内的HashMap类型的weeks命名变量,再通过两个<c:set>标签向这个weeks命名变量中加入两个元素:

  1. <%@ page import="java.util.HashMap" %> 
  2. <jsp:useBean id="weeks" scope="request" class="java.util.HashMap" /> 
  3. <c:set target="${weeks}" property="1" value="Monday" /> 
  4. <c:set target="${weeks}" property="2" value="Tuesday" /> 
  5. 以上代码中的第一个<c:set>标签与以下Java程序片段的作用是等价的:  
  6. <%  
  7. Map weeks=(Map)pageContext.findAttribute("weeks");  
  8. weeks.put("1","Monday");  

%> <c:remove>标签

<c:remove>标签用于删除特定范围内的命名变量,它的语法为:

  1. <c:remove var="命名变量的名字"  scope="{page|request|session|application}" /> 

以上scope属性指定范围,可选值包括page、request、session和application。如果没有设定scope属性,那么会从所有范围内删除var指定的命名变量。

例如以下代码会删除会话范围内的user命名变量:

  1. <c:remove var="user" scope="session" /> 

以上代码中的<c:remove>标签与以下Java程序片段的作用是等价的:

  1. <%  
  2. pageContext.removeAttribute("user",PageContext.SESSION_SCOPE);  
  3. %> 

以下<c:remove>标签没有设置scope属性,因此会删除所有范围内的user命名变量:

  1. <c:remove var="user" /> 
<c:catch>标签

<c:catch>标签用于捕获标签主体中可能出现的异常,并且它把异常对象作为命名变量保存在页面范围内。<c:catch>标签的语法为:

  1. <c:catch var="代表异常对象的命名变量的名字" /> 

例如以下代码中的<c:catch>标签的主体内容为Java程序片段:

  1. <c:catch var="ex"> 
  2. <%  
  3. int a=11;  
  4. int b=0;  
  5. int c=a/b; //抛出异常  
  6. %> 
  7. </c:catch> 
  8. <c:out value="${ex.message}" default="No exception" /> 

以上<c:catch>标签等价于以下Java程序片段:

  1. <%  
  2. try{  
  3.   int a=11;  
  4.   int b=0;  
  5.   int c=a/b;  
  6. }catch(Exception e){  
  7.   //把异常对象存放在页面范围内  
  8.   pageContext.setAttribute("ex", e, PageContext.PAGE_SCOPE);  
  9. }  
  10. %> 
 条件标签

条件标签能够实现Java语言中的if语句及if-else语句的功能,它包括以下几种。

<c:if>:用于实现Java语言中的if语句的功能。

<c:choose>、<c:when>和<c:otherwise>:用于实现Java语言中的if-else语句的功能。

15.4.1  <c:if>标签

<c:if>标签用于实现Java语言中的if语句的功能,它的语法为:

  1. <c:if test="逻辑表达式"   
  2.     var="代表逻辑表达式的值的命名变量的名字"   
  3.     scope="{page|request|session|application}" / > 

<c:if>标签会把逻辑表达式的值存放在var属性指定的命名变量中,scope属性则指定命名变量的范围,scope属性的默认值是page(页面范围)。

例如以下<c:if>标签先判断username请求参数的值是否为Tom,然后把判断结果作为result命名变量存放在请求范围内:

  1. <c:if test="${param.username=='Tom'}"  var="result" scope="request" /> 
  2. ${result} 

以上<c:if>标签等价于以下Java程序片段:

  1. <%  
  2. String username=request.getParameter("username");  
  3. if(username!=null && username.equals("Tom"))  
  4.   request.setAttribute("result",true);  
  5. else  
  6.   request.setAttribute("result",false);  
  7. %> 

<c:if>标签还可以包含标签主体,只有当逻辑表达式的值为true时,才会执行标签主体。例如:

  1. <c:if test="${param.save=='user'}" > 
  2.   Saving user  
  3.   <c:set var="user"  value="Tom" />   
  4. </c:if> 

以上<c:if>标签等价于以下Java程序片段:

  1. <%  
  2. String save=request.getParameter("save");  
  3. if(save!=null && save.equals("user")){  
  4.   //对应<c:if>标签的主体  
  5.   out.print("Saving user")  
  6.   pageContext.setAttribute("user","Tom");  
  7. }  
  8. %> 
<c:choose>、<c:when>和<c:otherwise>标签

<c:choose>、<c:when>和<c:otherwise>在一起连用,可以实现Java语言中的if-else语句的功能。例如以下代码根据username请求参数的值来打印不同的结果:

  1. <c:choose> 
  2.   <c:when test="${empty param.username}">   
  3.     Nnknown user.  
  4.   </c:when> 
  5.   <c:when test="${param.username=='Tom'}">   
  6.     ${param.username} is manager.  
  7.   </c:when> 
  8.   <c:otherwise>   
  9.     ${param.username} is employee.  
  10.   </c:otherwise> 
  11. </c:choose> 

以上标签等价于以下Java程序片段:

  1. <%  
  2. String username=request.getParameter("username");  
  3. if(username==null){  
  4.   //对应第一个<c:when>标签的主体  
  5.   out.print("Nnknown user.");  
  6. }else if(username.equals("Tom")){  
  7.   //对应第二个<c:when>标签的主体  
  8.   out.print(username+" is manager.");  
  9. }else{  
  10.   //对应<c:otherwise>标签的主体  
  11.   out.print(username+" is employee.");  
  12. }  
  13. %> 

<c:choose>、<c:when>和<c:otherwise>标签的使用必须符合以下语法规则:

<c:when>和<c:otherwise>不能单独使用,它们必须位于<c:choose>父标签中。

在<c:choose>标签中可以包含一个或多个<c:when>标签。

在<c:choose>标签中可以不包含<c:otherwise>标签。

在<c:choose>标签中如果同时包含<c:when>和<c:otherwise>标签,那么<c:otherwise>必须位于<c:when>标签之后。

 

原创粉丝点击