虽然html很好,尤其是html5越来越火,但仍有很多网站是用JSP做的,JSP里面虽然有很多标签,但我们是否可以自己定义自己的呢?当然可以,参考代码如下:

  1. 写自己的taglib类,并重写里面的方法
public class DropDownBoxTaglib extends TagSupport {

    private static final long serialVersionUID = 1L;

    @Override

    public int doStartTag() throws JspTagException {
        return SKIP_BODY;
    }

    @Override
    public int doEndTag() throws JspTagException {

        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        RequestTypeService requestTypeService = (RequestTypeService) applicationContext.getBean("requestTypeService");

        List<RequestType> requestTypes = requestTypeService.query();

        request.setAttribute("REQUESTTYPES", requestTypes);

        try {
            pageContext.include("/component/request_type_select.jsp");
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return EVAL_PAGE;

    }

    @Override

    public void release() {
        super.release();
    }
}
  1. 对应的tld文件
<?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/j2ee web-jsptaglibrary_2_0.xsd"
    version="2.0">

    <tlib-version>1.0</tlib-version>
    <jsp-version>1.1</jsp-version>
    <short-name>aug</short-name>

    <tag>
        <name>select</name>
        <tag-class>cn.bridgeli.DropDownBoxTaglib</tag-class>
        <body-content>empty</body-content>
        <!--
            <attribute>
                <name>formatKey</name>
                <required>false</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        -->
    </tag>
</taglib>
  1. 具体哪个文件使用该taglib
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<% List<RequestType>requestTypes = (List<RequestType>)request.getAttribute("REQUESTTYPES");%>
    <select name="requestTypeId" id="requestTypeId" style="width: 608px;">
        <option>-Select a request type Please-</option>
        <% for(int i = 0; i< requestTypes.size(); i++) {
            RequestType requestType = requestTypes.get(i);
        %>

            <option value=<%= requestType.getId() %>><%= requestType.getName() %></option>
        <%
            }
        %>
</select>