Java Web之浅谈自定义标签库

    自定义标签主要有两种方式:

            方式1:定义一个类继承TagSupport或它的子类,重写相关方法以及自己的方法,当然也可以不继承上述类,自己写类;其次是编写tld文件,进行标签和方法的描述;在web.xml中进行注册。上篇以简要介绍过。

            方式2:在WEB-INF下建一个tags文件夹,存放自己的标签;建一个jsp文件,将后缀名改为tag,文件名改为这个标签的功能名称,下面举个列子:

            在WEB-INF下的tags建一个jsp命名为hello.tag,将page指令改为tag指令里面具体内容如下:

<%@ tag pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ attribute name="name" type="java.lang.String" required="true"%>
<%@ attribute name="items" type="java.util.List" required="true"%>
//attribute有一rtexprvalue默认值为true,表示可以用EL表达式给这个属性赋值。
//required为true表示必填的属性,其默认值为false
//type 为前面name属性的类型
<div class="nav dropdown pull-right">
	<font color="red">${name}</font> <br>
    <c:forEach var="s" items="${items}" varStatus="ind">
    	${ind.index+1}, <b>${s}</b> <br>
    </c:forEach>
</div>

    接下看看在index.jsp中的引用,代码如下:

<%@ page language="java" pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib prefix="kzw" tagdir="/WEB-INF/tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
	List<String> ss = new ArrayList<String>(){{
		add("hello");
		add("world");
		add("你好");
	}};
	//request.setAttribute("ss", ss);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">
		<title>My JSP 'index.jsp' starting page</title>
	</head>

	<body>
		<kzw:hello name="${1+233}" items="<%=ss%>"/>
		<br>
	</body>
</html>

    值得注意的:

             当我们在index.jsp中用<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>存储一个值时,我们的hello.tag标签中是拿不到的,因为值的范围在pageContext,可以在<c:set/>标签中将存储范围改为request。解析时,tag变为jsp的一部分,所以request可以。

        个人对这份理解,这个自定义的hello.tag就像是html的函数! 

有不正之处还请指正!Thank you!


你可能感兴趣的:(标签,自定义标签)