7.3.5 variable指令
7.3.5 variable指令
通过variable可以将tag file中的一些值传递到JSP页面。tag file中的variable指令和标签库描述文件中的variable元素类似,它用于定义那些需要传递到JSP页面的变量。tag file支持多个variable指令,这意味着可以传递多个值到JSP页面。
相对而言,attribute指令的作用与variable相反,attribute指令用于将值从JSP页面传递到tag file。variable指令的语法如下:
1 | <%@ variable attribute1="value1" attribute2="value2" ... %> |
variable属性
| 属性 | 描述 |
|---|---|
name-given |
变量名。在JSP页面的脚本和EL表达式中,可以使用该变量名。如果指定了name-from-attribute属性,那么name-given属性就不能出现了,反之亦然。name-given的值不能和同一个tag file中的属性名重复 |
name-from-attribute |
和name-given属性类似,由标签属性的值来决定变量的名称。如果name-from-attribute和name-given属性同时出现或者都不出现的话会出现错误 |
alias |
设定一个用来接收变量值的局部范围 |
variable-class |
变量的类型。默认为java.lang.String |
declare |
设定该变量是否声明。默认值为false |
scope |
用于指定该变量的范围。可取的值为AT_BEGIN、AT_END、和NESTED。默认值为NESTED |
description |
用于描述该变量 |
你或许会奇怪,既然JSP页面可以调用JspWriter来接收变量值了,为什么还需要通过variable指令来传递变量值呢。那是因为通过JspWriter只能简单地将一个String传递到JSP页面,灵活性很差。 |
实例
firstTag.tag
下面的firstTag.tag用于输出服务器长格式的当前日期。
1 | <%@ tag import="java.util.Date" import="java.text.DateFormat"%> |
但是如果你还需要输出短格式的服务器日期的话,就必须再写一个tag file。写两个功能类似的tag file显然是冗余工作。如果使用变量指令,就没有这样的问题了,只需要在tag file中定义longDate和shortDate两个变量就可以了。
varDemo.tag
varDemo.tag提供了输出服务器当前日期长格式和短格式的两个功能,它定义了两个变量:longDate和shortDate。
1 | <%@ tag import="java.util.Date" import="java.text.DateFormat"%> |
注意,这里使用了jspContext.setAttribute方法来设置变量。jspContext是一个隐藏对象。JSTL中的set标签也能实现同样的功能。
同时需要注意的是,这里使用了doBody动作元素来执行<mytags:variableDemo>标签的标签体。关于doBody和invoke动作元素我们将在下一节进行介绍。
varDemoTest.jsp页面
varDemoTest.jsp使用了varDemo.tag的标签。
1 | <%@ page language="java" contentType="text/html; |
可以通过下面的URL来访问varDemoTest.jsp:
http://localhost:8080/app07a/variableDemoTest.jsp
显示效果如下图所示:
在很多情况下都需要用到变量。比如说,你希望实现一个这样的功能:根据产品标识从数据库中获取该产品的详细信息。你可以通过一个属性来传递产品标识。然后可以用多个变量来保存产品的详细信息,每个变量对应为产品的每个属性。最终,你会用到例如name、price、description、imageURL等变量。