[JSP]自定义标签库taglib | 您所在的位置:网站首页 › jsp导入文件 › [JSP]自定义标签库taglib |
自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag、TagSupport、BodyTagSupport、SimpleTagSupport(JSP2.0)。 2.在tld文件中配置标签库信息,以及标签与实现类的映射。 3.在jsp文件中引用自定义标签。 标签APITag接口 doEndTag():执行当前标签实例的结束标签。在doStartTag()执行后调用 doStartTag():执行当前标签实例的开始标签。 getParent():获取当前标签的父标签 release():释放当前标签的状态 setPageContext(PageContext):设置当前标签的页面 setParent(Tag):设置当前标签的父标签 TagSupport类 TagSupport类是实现Tag接口的一个模板类。它实现了Tag接口的大部分方法,用户只需要实现doStartTag()和doEndTag()方法。 SimpleTag接口(JSP2.0) JSP2.0的接口,比Tag接口更简单。 doTag():执行当前标签的所有处理任务。 getParent():获取当前标签的父标签。 setJspBody(JspFragment):提供当前标签的实体为一个JspFragment对象 setJspContext(JspContext):设置JSP页面的 setParent(JspTag):设置当前标签的父标签。 SimpleTagSupport类(JSP2.0)SimpleTagSupport类是实现SimpleTag接口的一个模板类。它实现了SimpleTag接口的大部分方法,用户只需要实现doTag()方法。 tld标签库描述文件tld全称为Tag Library Description,即标签库描述文件。 tld文件用来配置标签库的基本信息。 taglib主要元素 taglib.tld 1.0 2.0 taglib http://notes.javaee.jsp.com/taglib Private Taglib
copyright notes.javaee.jsp.taglib.Copyright JSP Copyright tag.
l shortname指明推荐使用的prefix。 l uri指明引用这个标签库时使用的uri。 l tag指明要定义标签的信息。 其中,tag可以设置的属性如下: 属性 描述 name 定义属性的名称。每个标签的是属性名称必须是唯一的。 tagclass 指定映射的Java类。 required 指定属性是否是必须的或者可选的,如果设置为false为可选。 rtexprvalue 声明在运行表达式时,标签属性是否有效。 type 定义该属性的Java类类型 。默认指定为String。 description 描述信息。 fragment 如果声明了该属性,属性值将被视为一个JspFragment。 bodycontent 指明标签体的限制,有3种取值:empty、JSP和tagdependent empty:不允许有标签体存在。 JSP:允许有标签体存在。 tagdependent:允许有标签体存在,但是标签体内的JSP代码不会被执行。
如果tld文件位于/WEB-INF/下面,Tomcat会自动加载tld文件中的标签库。如果位于其他的位置,可以在web.xml中配置。
http://notes.javaee.jsp.com/taglib /WEB-INF/taglib.tld
或者在JSP中直接使用 实例使用TagSupport自定义标签 1. 继承标签API 定义一个HelloTag类,继承TagSupport类。 HelloTag.java: package notes.javaee.jsp.taglib;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport;
public class HelloTag extends TagSupport { private static final long serialVersionUID = -8828591126748246256L; private String name;
@Override public int doEndTag() throws JspException { try { this.pageContext.getOut().println("Hello, " + name); } catch (Exception e) { throw new JspException(e); }
return EVAL_PAGE; }
public String getName() { return name; }
public void setName(String name) { this.name = name; } }
2. 在tld中配置标签库信息 在/WEB-INF下新建taglib.tld文件。 指明推荐使用的prefix为taglib。 指明引用这个标签库时使用的uri为http://notes.javaee.jsp.com/taglib。 定义要引用的标签信息。指明标签名,指明映射的Java类,和前面的对应。 然后定义这个标签的属性。因为前面Java类中的属性为name,这里也要对应上。 taglib.tld: 1.0 2.0 taglib http://notes.javaee.jsp.com/taglib Private Taglib
hello notes.javaee.jsp.taglib.HelloTag empty Hello tag with parameters.
name true true
3. 在jsp文件中引用标签 前面在tld文件中配置了各个关键信息,现在就可以直接在jsp文件中使用了。 首先,需要在jsp文件中引入标签库文件。这里和标准标签库JSTL一样,使用taglib关键字来说明要引入的是标签库。uri是引入地址,prefix是标签库关键字。 由于前面定义的标签name为hello,所以可以使用的标签名为:prefix+name,即:taglib:hello。 Hello.jsp: Insert title here
结果: 使用SimpleTagSupport自定义标签(JSP2.0) 1. 继承标签API 定义一个HelloTag类,继承SimpleTagSupport类。 PersonTag.java: package notes.javaee.jsp.taglib2;
import java.io.IOException;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport;
public class PersonTag extends SimpleTagSupport { private String name; private String sex; private int age;
@Override public void doTag() throws JspException, IOException { this.getJspContext().getOut().write( "[Person Info]name: " + name + ", sex: " + sex + ", age:" + age); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
2.在tld中配置标签库信息 在/WEB-INF下新建taglib.tld文件。 关键配置信息基本和使用TagSupport自定义标签范例中一样。但是由于对应Java类中有3个属性,需要一一对应上。 taglib.tld: 1.0 2.0 taglib http://notes.javaee.jsp.com/taglib Private Taglib
person notes.javaee.jsp.taglib2.PersonTag empty person info tag
name true true
sex true true
age true true
3.在jsp文件中引用标签 引用标签方式和使用TagSupport自定义标签范例一样。 personTag.jsp: Insert title here 结果: |
CopyRight 2018-2019 实验室设备网 版权所有 |