Java Web之淺談自定義標籤庫

    自定義標籤主要有兩種方式:html

            方式1:定義一個類繼承TagSupport或它的子類,重寫相關方法以及本身的方法,固然也能夠不繼承上述類,本身寫類;其次是編寫tld文件,進行標籤和方法的描述;在web.xml中進行註冊。上篇以簡要介紹過。
java

            方式2:在WEB-INF下建一個tags文件夾,存放本身的標籤;建一個jsp文件,將後綴名改成tag,文件名改成這個標籤的功能名稱,下面舉個列子:
web

            在WEB-INF下的tags建一個jsp命名爲hello.tag,將page指令改成tag指令裏面具體內容以下:session

<%@ 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中的引用,代碼以下:
app

<%@ 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>

    值得注意的:
jsp

             當咱們在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的函數! 
ui

有不正之處還請指正!Thank you!spa

相關文章
相關標籤/搜索