7.5 JSP invoke动作

7.5 invoked动作

invoke动作元素和doBody类似,**在tag file中,可以使用它来调用一个fragment(代码片段)**。

invoke动作的属性

invoke动作元素也有多个属性,表7.7展示了invoke动作元素中的全部属性,其中fragment属性是必须的。

属性 描述
fragment 要调用的fragment的名称
var 用于保存片段主体内容的变量值,标签体内容会以java.lang.String类型保存在这个var变量内。varvarReader属性只能出现一个。
varReader 用于保存标签主体内容的变量值,主体内容会以java.io.Reader``类型保存在这个varReader变量内。varvarReader属性只能出现一个
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动作执行标签体中指定的内容