7.5 invoked动作
invoke
动作元素和doBody
类似,**在tag file
中,可以使用它来调用一个fragment
(代码片段)**。
invoke动作的属性
invoke
动作元素也有多个属性,表7.7展示了invoke
动作元素中的全部属性,其中fragment
属性是必须的。
属性 |
描述 |
fragment |
要调用的fragment 的名称 |
var |
用于保存片段主体内容的变量值,标签体内容会以java.lang.String 类型保存在这个var 变量内。var 和varReader 属性只能出现一个。 |
varReader |
用于保存标签主体内容的变量值,主体内容会以java.io.Reader``类型保存在这个varReader 变量内。var 和varReader 属性只能出现一个 |
scope |
变量保存到的作用域 |
实例
template.tag
/app07a/WebContent/WEB-INF/tags/template.tag
是一个模板文件,使用这个文件可以渲染不同的jsp
页面,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <%@tag description="template 1" pageEncoding="UTF-8"%> <!-- 使用名称为header的片段 --> <%@attribute name="header" fragment="true"%> <%@attribute name="footer" fragment="true"%> <%@attribute name="body" fragment="true"%> <%@attribute name="title" fragment="true"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><jsp:invoke fragment="title" /></title> </head> <body> <!--填入JSP页面中名称为header的片段中的具体内容 --> <jsp:invoke fragment="header" /> <jsp:invoke fragment="body" /> <jsp:invoke fragment="footer" /> </body> </html>
|
templateTest1.jsp
/app07a/WebContent/templateTest1.jsp
,这个文件中定义了多个代码片段,如下所示;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib prefix="t" tagdir="/WEB-INF/tags/"%> <t:template> <jsp:attribute name="footer"> <hr color="green"> templateTest1.jsp的尾部信息. <hr color="green"> </jsp:attribute> <jsp:attribute name="body"> <hr color="blue"> templateTest1.jsp的正文信息. <hr color="blue"> </jsp:attribute> <jsp:attribute name="header"> <hr color="red"> templateTest1.jsp的头部信息. <hr color="red"> </jsp:attribute> <jsp:attribute name="title"> templateTest1 </jsp:attribute> </t:template>
|
通过URL:http://localhost:8080/app07a/templateTest1.jsp可以访问,显示效果如下:
templateTest2.jsp
/app07a/WebContent/templateTest2.jsp
,这个文件同样使用模板文件来渲染:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib prefix="t" tagdir="/WEB-INF/tags/"%> <t:template> <jsp:attribute name="footer"> <hr color="green"> <strong>templateTest2.jsp的尾部信息.</strong> <hr color="green"> </jsp:attribute> <jsp:attribute name="title"> templateTest2 </jsp:attribute> <jsp:attribute name="body"> <hr color="blue"> <strong>templateTest2.jsp的正文信息.</strong> <hr color="blue"> </jsp:attribute> <jsp:attribute name="header"> <hr color="red"> <strong>templateTest2.jsp的头部信息.</strong> <hr color="red"> </jsp:attribute> </t:template>
|
URL:http://localhost:8080/app07a/templateTest2.jsp
显示效果:
小结
- 使用片段可以使多个
jsp
页面具有相同的风格。
doBody
动作执行标签体中的所有内容
invoke
动作执行标签体中指定的内容