如何创建使用jsp自定义标签
一.编写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代码
<!DOCTYPE taglib PUBLIC
"-//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代码
这样,你的jsp页面就可以使用自己的tag了。用这个标签就可以根据传人的boolean值来决定标签包的jsp内容是否输出
Java代码
">
//需有权限输出,用户才能看到的内容
jsp自定义标签到底有什么作用?
jsp自定义标签就是通过自定义标签实现类来实现复杂的、可重复利用的功能。简化jsp页面,提高代码的复用性。
比如现在你需要在页面定义一个数据表格(html table),和数据库中的表格结构一样,显示的数据也一样。就可以通过定义jsp标签的方式来将sql查询,组织数据、画html表格的事情全部在jsp标签实现类中实现。
如果在系统中很多页面需要这样的表格,你定义的jsp标签就会很有用。但实际应用要比这个复杂的多。
JSP中如何制作树形选择框
JSP中可以引用jquery控件来制作树形选择框。其实就是联动下拉框,参考实现代码: body{font-size:13px} .clsInit{width:435px;height::35px;line-height:35px;padding-left:10px} .clsTip{padding-top:5px;background-color:#eee;display:none} .btn{border:solid 1px #666;padding:2px;width:65px;float:right;margin-top:6px;margin-right:6px;filter:progid:DXImageTransform.Mcrosoft.Gradient(GraientType=0,StartColorStr=#FFFFFF,EndColorStr=#ECE9D8);} $(function(){ function objInit(obj){ return $(obj).html('请选择'); } var arrData={ 厂商1:{品牌一:'型号1-1-1,型号1-1-2', 品牌二:'型号1-2-1,型号1-2-2'}, 厂商2:{品牌一:'型号2-1-1,型号2-1-2', 品牌二:'型号2-2-1,型号2-2-2'}, 厂商3:{品牌一:'型号3-1-1,型号3-1-2', 品牌二:'型号3-2-1,型号3-2-2'} }; $.each(arrData,function(pF){ $('#selF').append(''+pF+''); }); $('#selF').change(function(){ objInit('#selT'); objInit('#selC'); $.each(arrData,function(pF,pS){ if($('#selF option:selected').text()==pF){ $.each(pS,function(pT,pC){ $('#selT').append(''+pT+''); }); $('#selT').change(function(){ objInit('#selC'); $.each(pS,function(pT,pC){ if($('#selT option:selected').text()==pT){ $.each(pC.split(","),function(){ $('#selC').append(''+this+''); }) } }) }); } }) }); }); 厂商:请选择 品牌:请选择 型号:请选择 效果: