1、继承TagSupport,写一个tld文件
2、直接写一个tag文件,在jsp中引用(现在经常用到的)
第一种:
a、创建一class DictTag,继承TagSupport,并重写doStartTag与doEndTag方法
public class DictTag extends TagSupport {
StringBuffer optionStr = new StringBuffer();
//该属性是用户在页面使用该自定义标签时,属性所对应的值(可以根据情况在此定义,并提供get/set)
private String category;
private String display_name;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this .category = category;
}
public String getDisplay_name() {
return display_name;
}
public void setDisplay_name(String display_name) {
this.display_name = display_name;
}
//本例中是拼出来的死数据(实际运用中这些数据是要从数据库动态取出来的)
@Override
public int doStartTag() throws JspException {
// 假设的一个Dict集合
// List<Dict> dictList = new ArrayList<Dict>();
//下面的步骤就是开始拼出自定义标签了
//注意:这里的select标签的属性 name 和 id 都是动态得到的(根据用户在页面中应用到此标签时,给它设置的属性)
optionStr.append("<SELECT NAME=" + getCategory() + "ID="
+ getCategory() + ">");
// 具体的options项,将通过数据表取出来,然后循环放入option
if (null != getCategory() && !"".equals(getCategory())) {
if (("GENDER").equals(getCategory())) {
optionStr.append("<OPTION VALUE=");
optionStr.append("1");// 这里到时候换成从SEA_DICT对象中取出来的dict_value
optionStr.append(">");
optionStr.append("male");// 这里对应SEA_DICT表中display_name
optionStr.append("</OPTION>");
optionStr.append("<OPTION VALUE=");
optionStr.append("2");// 这里到时候换成从SEA_DICT对象中取出来的dict_value
optionStr.append(">");
optionStr.append("famale");// 这里对应SEA_DICT表中display_name
optionStr.append("</OPTION>");
optionStr.append("<OPTION VALUE=");
optionStr.append("3");// 这里到时候换成从SEA_DICT对象中取出来的dict_value
![jsp自定义标签 之 继承TagSupport类实现 jsp自定义标签开发](http://img.413yy.cn/images/31101031/31053552t016949be73f961035d.jpg)
optionStr.append(">");
optionStr.append("unknown");// 这里对应SEA_DICT表中display_name
optionStr.append("</OPTION>");
/*这里的是假设以后从数据库中拿数据,就只用写一遍了
* for (Dict dict : dictList) {
* optionStr.append("<OPTION VALUE=");
* optionStr.append(dict.getDictValue());//
* 这里到时候换成从SEA_DICT对象中取出来的dict_value optionStr.append(">");
* optionStr.append(dict.getDisplayName());//
* 这里对应SEA_DICT表中display_name optionStr.append("</OPTION>"); }
*/
} else if (("STATUS").equals(getCategory())) {
optionStr.append("<OPTION VALUE=");
optionStr.append("1");// 这里到时候换成从SEA_DICT对象中取出来的dict_value
optionStr.append(">");
optionStr.append("valid");// 这里对应SEA_DICT表中display_name
optionStr.append("</OPTION>");
optionStr.append("<OPTION VALUE=");
optionStr.append("2");// 这里到时候换成从SEA_DICT对象中取出来的dict_value
optionStr.append(">");
optionStr.append("invalid");// 这里对应SEA_DICT表中display_name
optionStr.append("</OPTION>");
}
}
return super.doStartTag();
}
@Override
public int doEndTag() throws JspException {
// 结束的时候把最后的尾标签加上
optionStr.append("</SELECT>");
try {
pageContext.getOut().println(optionStr.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.doEndTag();
}
}
b、在WEB-INF目录下建一个tld文件来定义tag,如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
" http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>html</short-name>
//需要多少个tag就在此定义多少个
<tag>
<name>dict</name>
<tag-class>com.tags.DictTag</tag-class>
<body-content>JSP</body-content>
//下面的attribute表示,定义的标签有三个属性
<attribute>
<name>category</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>dict_value</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>display_seq</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
c、自定义标签都写好了以后需要在web.xml中声明,非常简单,只需配置一下
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/custom_defined</taglib-uri>
<taglib-location>/WEB-INF/custom_defined.tld</taglib-location>
</taglib>
</jsp-config>