程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 自定義標簽的開發及使用自定義標簽實現迭代foreach循環

自定義標簽的開發及使用自定義標簽實現迭代foreach循環

編輯:關於JSP

在JSP中,規范簡化了標簽庫的開發,在JSP2中開發自定義標簽只需如下三個步驟:
一、開發自定義標簽處理類
二、建立一個*.tld文件
三、在JSP文件中使用自定義標簽
自定義標簽類應該繼承一個父類:javax.servlet.jsp.tagext.SimpleTagSupport,除此之外,JSP自定義標簽類還有如下要求:
一、如果標簽類包含屬性,每個屬性都需要提供對應的getter和setter方法
二、重寫doTag()方法,這個方法負責生成頁面內容
下面開始標簽的開發:
一、開發自定義標簽處理類 ForeachTag,實現迭代List集合,數組的功能
public class ForeachTag extends SimpleTagSupport {
// 標簽屬性
private String items;
private String var;
//這裡省略 getter setter方法

@Override
public void doTag() throws JspException, IOException {
Iterator ite = null;
Object tempItem = getJspContext().getAttribute(items);
// 如果是集合
if (tempItem instanceof Collection) {
ite = ((Collection) tempItem).iterator();
}
// 如果是數組
else if (tempItem instanceof Object[]) {
ite = Arrays.asList((Object[]) tempItem).iterator();
} else {
throw new RuntimeException("不能轉換");
}
// 進行迭代
while (ite.hasNext()) {
Object obj = ite.next();
getJspContext().setAttribute(var, obj);
//輸出標簽體
getJspBody().invoke(null);
}
}
}
二、開發*.tld文件。在web-inf目錄下新建mytaglib.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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>this is my tag library Definition</description>
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<uri>http://127.0.0.0/servlet/mytaglib</uri>
<tag>
<name>foreach</name>
<tag-class>taglib.ForeachTag</tag-class>
<body-content>scriptless</body-content>
<!-- 指定foreach循環中的items屬性和var屬性 -->
<attribute>
<name>items</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>
</taglib>
三、開發JSP,並在JSP中使用自定義的標簽實現list集合的迭代
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="" %>
<%@page import="java.util.*" %>
<%@taglib uri="http://127.0.0.0/servlet/mytaglib" prefix="mytag" %>
<%
List<String> lists=new ArrayList<String>();
lists.add("瘋狂Java講義");
lists.add("輕量級JavaEE企業級應用");
lists.add("瘋狂Ajax講義");
pageContext.setAttribute("lists",lists);

String[] ary=new String[3];
ary[0]="A"; www.2cto.com
ary[1]="B";
ary[2]="C";
pageContext.setAttribute("ary",ary);
%>
<html>
<head>
<title>自定義標簽-仿foreach標簽 功能:循環List集合,一維數組</title>
</head>
<body>
<h3>這裡迭代的是集合</h3>
<table style="border:solid 1px black; width=400xp;">
<mytag:foreach items="lists" var="item">
<tr>
<td>${item }</td>
</tr>
</mytag:foreach>
</table>
<br />
<h3>這裡迭代的是數組</h3>
<mytag:foreach items="ary" var="item">
${item }&nbsp;
</mytag:foreach>

</body>
</html>
JSP文件中需注意的問題:使用<%@taglib %>導入自定義開發的標簽,uri路徑與mytaglib.tld文件中指定的uri路徑相同

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved