如何创建使用jsp自定义标签

2024-12-12 04:33:59
推荐回答(2个)
回答1:

一.编写java类继承TagSupport或TagSupport
1) 提供属性的set方法,
此后这个属性就可以在jsp页面设置。以jstl标签为例
<c:out
value=""/>,这个value就是jsp数据到tag之间的入口。所以碰喊tag里面必须有一个setValue方法,具体的属性可以不叫value。例如setValue(String
data){this.data = data;}
这个“value”的名称是在tld里定义的。取什么名字都可以,只需tag里提供相应的set方法即可。
2)处理 doStartTag 或 doEndTag
这两个洞芹方法是
TagSupport提供的。 还是以<c:out value=""/>为例,当jsp解析这个标签的时候,在“<”处触发 doStartTag
事件,在“>”时触发 doEndTag 事件。通常在 doStartTag 里进行逻辑操作,在 doEndTag 里控制输出。
下面是一个简单的例子

Java代码

package com.test.tag;
import java.io.IOException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
/**
* PermissionBodyTag 根据是否有权限显示body内容
*/
public
class PermissionBodyTag
extends BodyTagSupport {
boolean permission;
public boolean isPermission() {
return permission;
}
public void setPermission(boolean permission) {
this.permission = permission;
}
public int doStartTag()
throws JspTagException {
if (permission) {
return EVAL_BODY_INCLUDE;
}
else {
return SKIP_BODY;
}
}
public int doEndTag()
throws JspTagException {
System.out.println("doEndTag");
try {
if (bodyContent !=
null) {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}else{
}
}
catch (IOException e) {
throw new JspTagException("IO ERROR:" + e.getMessage());
}
return EVAL_PAGE;
}
public void doInitBody()
throws JspTagException {
}
public void setBodyContent(BodyContent bodyContent) {
this.bodyContent = bodyContent;
}
}

通常你会发现自己绝大多数活动都集中在 doStartTag 或 doEndTag 方法里。确实如此,熟悉一些接口和类之后,写taglib很容易。正如《jsp设计》的作者所言:里面的逻辑稍微有点复杂,但毕竟没有火箭上天那么难。

二笑颤野.编写tld文件
标签文件其实只是一个XML格式的说明文件,内容也很简单。
创建tagTest-html.tld文件在这个标签文件中,我们将我们创建的标签取名 tagTest,并声明了类型和参数(permission)。将该文件保存在 /WEB-INF 下面。

Java代码


"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

1.2
1.1
tagTest
/taiji

permission
com.test.tag.PermissionBodyTag
JSP

permission
true
true




三.加到web.xml中
当然,我们还需要将我们自定义的标签添加到 web.xml 中,否则还是无法使用。

Java代码


/tagTest
/WEB-INF/tagTest-html.tld


四.在jsp页面导入tld

Java代码

<%@ taglib uri="/tagTest " prefix="tagTest "%>

这样,你的jsp页面就可以使用自己的tag了。用这个标签就可以根据传人的boolean值来决定标签包的jsp内容是否输出

Java代码


//需有权限输出,用户才能看到的内容

回答2:

1
jsp自定义标签需要引入两个jar 分别是
javax.servlet.jsp.jarjavax.servlet.jar
2
建立tld文件,建议目录为WEB-INF下,tld文件丛或液结构为下图,uri为整个标签库的名称,可以理解为java类,每一个tag分支,可以理解为java类中的每一个方法,我们在调用jsp自定义标签的时候就和调用java类一样,通过类找方法。tag分支重点要讲tag-class,该属性为该标签方法所指向的java类。attribute为参数,相信属性看步骤三附图。

3
关于tld文件属性的说明,可以参考下图

4
将tld文件引入web.xml中,建议名称与tld文件标签库名称一致

5
编写jsp自定义标签类,该类继承TagSupport类,我们需要做的就是重写doStartTag,我们可以通过JspWriter将后台处理的东西直接输出到jsp页面。当然了,输出的内容在实际操作中肯定经过了非常复杂的逻辑。

6
页面调用,首先需要引入标签团孝,<%@
taglib uri="option" prefix="option"%> option为标签名
定义在tld文件中,引用之后就可以在页面调用自定义标签了,简单的一渗物行代码。即可实现一个grid的输出,且可以重复利用。