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
等变量。