Tag File文件的理解
来源:互联网 发布:javascript官网 编辑:程序博客网 时间:2024/06/07 06:43
从Jsp 2.0开始,通过tag file的方式,无需编写标签处理类和标签描述文件(tld),也能够自定义标签。一个tag file和jsp页面一样,他拥有指令、脚本、EL表达式、动作元素、以及自定义标签。一个tag file文件以tag or tagx 为后缀,一个被其他文件包含的tag file 应该以tagf为后缀。
Tag File基础知识:
当使用tag file时需要注意以下两点:
(1)tag文件必须放在应用路径/WEB-INF/tags目录下才能生效;
(2)在页面引用的时候,Tag名和Tag file文件的名字是默认一样的(例如firstTag.tag在页面中的对应的标签名为firstTag)
Tag file中也有内置隐藏对象,类似jsp一样
先举一个简单的例子:显示当前时间的tag file
//首先是firstTag.tag文件<%@ tag import="java.util.Date" import="java.text.DateFormat" pageEncoding="utf-8"%><% DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG); Date now = new Date(System.currentTimeMillis()); out.println(dateFormat.format(now));%>//测试页面代码<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="easy" tagdir="/WEB-INF/tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body> <easy:firstTag/></body></html>
但是在理解dobody指令和invoke指令的时候看书时没看明白两者区别:
(1)doBody动作元素用来调用标签的本体内容,该标签也可以有属性,你可以通过这些属性来指定某个变量来接收主题内容,如果不使用这些指令,那么doBody动作元素会把主体内容写到Jsp页面的JspWriter上,该标签有如下非必须属性:
var - 给出变量名, 把片段经过 jsp 容器计算过之后的结果作为字符串保存.
varReader - 同上, 不过将结果作为一个 java.io.Reader 保存. 和var不能共存
scope - 作用域
doBodyDemo.tag 将便签主题存到session范围内的referer变量内<jsp:doBody var="referer" scope="session"/>main.jsp使用了doBodyDemo标签,将${header.referer}存到session范围内的referer变量中%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="easy" tagdir="/WEB-INF/tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body> your referer header:${header.referer} <br/> <easy:doBodyDemo> ${header.referer} </easy:doBodyDemo> <a href="viewReferer.jsp">view</a></body></html>
(2)invoke动作元素和doBody类似,invoke标签比dobody标签多一个fragment属性。在tag file中可以使用它调用一个fragment(关于fragment的定义网上百度如下:javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素。)在定义属性attribute指令中有一个fragment属性,如果属性为true就意味着这个属性就是一个fragment。
参照这篇博客jsp2.0+中的标签文件,JSP Fragment技术我才明白fragment主要适用于用于网页布局和修饰,可以将网页的内容和页面的结构分离,从而达到页面结构共享的目的。
这里把引用博文例子再写一遍:
1 首先在项目的WEB-INF/tags文件中,新建如下内容的tpl.tag文件
<%@ tag language="java" pageEncoding="UTF-8"%> <%@ attribute name="title"%> <%@ attribute name="tpl1" fragment="true" required="true"%> <%@ attribute name="tpl2" fragment="true" required="true"%> <%@ attribute name="tpl3" fragment="true" required="true"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>${title}</title> <style type="text/css"> #div1,#div2,#div3{ width:90%; margin:10px auto; border:10px solid red; } </style> </head> <body> <h1>jsp2.0标签文件</h1> <div id="div1"> <jsp:invoke fragment="tpl1"/> </div> <div id="div2"> <jsp:invoke fragment="tpl2"/> </div> <div id="div3"> <jsp:invoke fragment="tpl3"/> </div> <h2>jsp2.0 fragment技术</h2> </body> </html>
2.创建test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="xjo" tagdir="/WEB-INF/tags"%><xjo:tpl title="jsp标签文件的使用"> <jsp:attribute name="tpl1"> <h1>tpl1中的内容</h1> </jsp:attribute> <jsp:attribute name="tpl2"> <h1>tpl2中的内容</h1> </jsp:attribute> <jsp:attribute name="tpl3"> <h1>tpl3中的内容</h1> </jsp:attribute></xjo:tpl>
运行结果如下
- Tag File文件的理解
- 标签文件(tag file)
- Tag File的使用
- Tag:input type='file' 的文件长度问题
- Java_JSP2_标签文件Tag File支持;
- FILE 及 文件句柄的理解
- 我对于“Tag”的理解
- convertView中的TAG的理解
- 我对Tag(标签)的理解
- 关于View Tag值的不同理解
- 交换机中tag、untag的理解
- 理解java的File
- file的理解
- File的理解
- File类的理解
- ctages: tag file format
- Tag文件
- JSP的自定义标签(五)之Tag File
- NOIP2016[换教室] 期望概率DP
- js模块化开发一
- 推荐个朋友的博客
- 384. Shuffle an Array [Leetcode]
- 直播弹幕过滤敏感词之DFA算法
- Tag File文件的理解
- sqoop java.lang.NullPointerException 和 No columns to generate for ClassWriter
- ClobToString
- phoenix全局索引和本地索引测试,和hive连接
- mysql经纬度 某半径长度 内查询数据
- Premake 生成 Makefile 的缺省配置
- ios 蓝牙对战实现
- 1046: 奇数的乘积
- 从MySql读取中文数据输出乱码问题