JSP自定义标签及函数
自定义标签tags文件方式
在WEB-INF/tags目录下创建一个myTag.tag文件
Hello ${message}!
在JSP文件中使用myTag标签
输出结果为:Hello this is myTag!
自定义标签TLD文件方式
创建处理标签的类,重写doTag方法
package com.yeyun.web.taglib.tags;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class MyTagSupport extends SimpleTagSupport{
private String message;
public void doTag() throws JspException, IOException {
JspWriter writer = getJspContext().getOut();
writer.println("Hello " + message + "!");
}
public void setMessage(String message) {
this.message = message;
}
}
在WEB-INF/tlds目录下创建一个myTld.tld文件(taglib description,标签库描述符)
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
JSTL 1.1 tag library
自定义标签
1.1
t
/WEB-INF/tlds/myTld.tld
my自定义标签
myTag
com.yeyun.web.taglib.tags.MyTagSupport
empty
message
true
java.lang.String
消息
JSP文件中使用myTag标签(uri与TLD文件中的uri一致)
输出结果为:Hello this is my tld!
自定义标签函数
创建一个静态方法
package com.yeyun.web.taglib.fns;
public class MyFunction {
public static String getMessage(String message) {
return "Hello " + message + "!";
}
}
在WEB-INF/tlds目录下创建一个myFn.tld文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
JSTL 1.1 functions library
JSTL functions
1.1
fns
/WEB-INF/tlds/myFn.tld
获取信息
getMessage
com.yeyun.web.taglib.fns.MyFunction
java.lang.String getMessage(java.lang.String)
${fns:getMessage(message)}
JSP文件中使用自定义函数
${fns:getMessage("this is my function!")}
输出结果为:Hello this is my function!
总结
在使用任何标签库之前,必须在每个JSP文件的头部先引入标签库,然后在使用
*.tld文件的格式参考jstl.jar下META-INF目录下的fn.tld及c.tld
tag文件方式类似于freemarker的宏,可以创建自定义页面模板片段,供其他页面复用。如果需要复用页面代码片段,一般采用tag文件方式处理。涉及复杂的后台取数据及处理,采用tld文件方式处理。
自定义函数可以直接获取数据源,而不是通过常见的URL方式返回数据源。例如:
常见的属性
自定义标签的taglib
属性
描述
tlib-version
标签库的版本号
short-name
标签库默认的助记名称
uri
该标签库的 URI,相当于该标签库的唯一标识。JSP 页面中使用标签库时就是根据该URI 属性来定位标签库的
description
描述信息
display-name
显示的名称
自定义标签的tag
属性
描述
description
描述信息
name
唯一的标签名
tag-class
处理标签类的全路径,该类为javax.serlvet.jsp.tagext.JspTag的子类
body-content
指定标签体内容. tagdependent:标签体内容直接被写入BodyContent,由自定义标签类来进行处理,而不被JSP容器解释。例如:heihei。empty:空的标签体内容,即起始标记和结束标记之间没有内容。例如:。scriptless:支持静态 HTML 元素,表达式语言等,但不支持JSP语法。JSP:支持所有的JSP语法
description
描述信息
fragment
如果声明了该属性,属性值将被视为一个 JspFragment
自定义标签的attribute
属性
描述
name
定义属性的名称。每个标签的是属性名称必须是唯一的
required
指定属性是否是必须的或者可选的,如果设置为false为可选
rtexprvalue
声明在运行表达式时,标签属性是否有效
type
定义该属性的Java类类型 。默认指定为 String
description
描述信息
fragment
如果声明了该属性,属性值将被视为一个 JspFragment
*自定义标签函数的function
属性
描述
description
描述信息
name
唯一的函数名
function-class
包含静态方法的java类的全路径
function-signature
静态方法的声明
example
使用自定义函数的示例