简单介绍一下自定义标签的创建方法,很简单也很实用。我这里是创建了一个select自定义标签,使用这个标签会在jsp页面上自动呈现一个select下拉框。如下图所示:
一、配置tid标签文件
这个配置文件一般会放在web-inf文件夹下,因为在web.xml文件中需要配置这个配置文件的路径,所以习惯放在这里。直接贴代码:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/jsee/web-jsptagLibrary_2_0.xsd"
version="2.0">
<tlib-version>1.2</tlib-version>
<uri>zd_dict</uri>
<short-name>zd</short-name><!--表示标签的前缀名字类似于<jsp:forward>中的jsp-->
<tag>
<name>dict</name><!--表示标签的名字 类似于<jsp:forward>中的forward-->
<description>数据字典</description>
<tag-class>com.zd.control.tag.DitcTag</tag-class> <!--标签所在类 -->
<body-content>empty</body-content><!--是否存在标签体-->
<!-- 标签添加参数 -->
<attribute>
<name>id</name><!-- 给select定义一个id(必须) -->
<required>true</required>
<rtexprvalue>false</rtexprvalue><!-- 说明属性不可以是一个运行时表达式(必须是一个常量String) -->
</attribute>
<attribute>
<name>name</name><!-- name映射(不是必须) -->
<required>false</required>
<rtexprvalue>false</rtexprvalue><!-- 说明属性不可以是一个运行时表达式(必须是一个常量String) -->
</attribute>
</tag>
</taglib>
二、编写tag实现类
package com.zd.control.util;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zd.model.system.DictionaryManage;
import com.zd.model.system.UserManage;
import com.zd.service.inter.system.DictionaryManageService;
/**
* @author zhangQiFeng
* @version :
*/
public class DitcTag extends TagSupport{
private static final long serialVersionUID = 1L;
//参数
public String id;//给select定义一个id(必须)
public String name;//name映射(不是必须)
public static DictionaryManageService dictionaryManageService;
public static ApplicationContext context=null;
static{
context=new ClassPathXmlApplicationContext("applicationContext.xml");//创建spring实体类上下文
dictionaryManageService = (DictionaryManageService)context.getBean("dictionaryService");
}
public int doStartTag()throws JspException{
//获取session中的用户对象
UserManage user = (UserManage)super.pageContext.getSession().getAttribute("user");
JspWriter out = super.pageContext.getOut();
//存储标签结果
List<DictionaryManage> dataList = new ArrayList<DictionaryManage>();
//设置标签内容
String result = "<select ";
//定义id
if(id!=null&&!"".equals(id)){
result += " id='"+id+"' ";
}
//name映射
if(name!=null&&!"".equals(name)){
result += " name='"+name+"' ";
}
try{
dataList = dictionaryManageService.findDitcTag(id);
if(!dataList.isEmpty()){
for(DictionaryManage dm : dataList){
result += "<option value='"+dm.getDdId()+"' >"+dm.getdName()+"</option>";
}
}
result += "</select>";
out.println(result);
}catch(Exception e){
e.printStackTrace();
}
return TagSupport.SKIP_BODY;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
三、配置web.xml
<!-- jsp自定义标签 -->
<jsp-config>
<taglib>
<taglib-uri>zd_dict</taglib-uri>
<taglib-location>/WEB-INF/tag/dict.tld</taglib-location>
</taglib>
</jsp-config>
四、实用方法
头部引入:<%@ taglib prefix="zd" uri="zd_dict" %>
使用方法:<zd:dict id="100" />
参数解释:
参数名称 是否必填 类型 默认值 释义
id; 必填 字符串 无 //id(必须)
name; 非必填 字符串 无 //name映射(不是必须)