在JSP中用自定義標籤實現集合的遍歷——山寨版c:foreach
【文章標題】在JSP中用自定義標籤實現集合的遍歷——山寨版<c:foreach>
【文章作者】曾健生
【作者郵箱】[email protected]
【作者QQ】190678908
*******************************************************************************
在JSTL中,標籤<c:foreach></c:foreach>可方便地遍歷集合或陣列,在瞭解了自定義標籤後,可動手實現<c:foreach>標籤的功能。
在編寫自定義標籤前,總要把實驗環境搭建好^-^
首先,定義一個
package com.javaeye.newjueqi;
/**
*實驗類Person
*/
publicclass Person {
private String name;
privateintage;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.
}
}
既然是遍歷集合,那麼集合也是必須的,我們在測試頁面TestMyELTag.jsp上寫下如下的JSP程式碼,生成一個測試用途的集合ArrayList,集合中有三個元素
<%
//第1個人物件
Person p1=new Person();
p1.setName("Tom");
p1.setAge(23);
//第2個人物件
Person p2=new Person();
p2.setName("Mike");
p2.setAge(33);
//第3個人物件
Person p3=new Person();
p3.setName("Jack");
p3.setAge(43);
ArrayList list=new ArrayList();
list.add( p1 );
list.add( p2 );
list.add( p3 );
//把ArrayList儲存在application
pageContext.setAttribute( "PersonList", list );
%>
在編寫“山寨版”<c:foreach>前,有必要先了解一下正版的<c:foreach>的標準用法是怎麼樣的。如果用<c:foreach>遍歷上述的集合寫法如下:
<c:forEachitems="${pageScope.personlist}" var="per">
${per.name } -- ${per.age }<br>
</c:forEach>
<c:foreach>是迴圈控制,可以將集合中的成員循序遍歷一遍,執行方式為條件符合時,將會重複執行<c:foreach>的本體內容。
<c:foreach>中的屬性的含義:items是被迭代的集合物件,var是用來存放現在指向的成員,上面的程式碼執行後的結果如圖1所示:
圖1
我們實現一個自定義的標籤<newjueqi: myforEach>,模擬實現<c:forEach>的功能,用法如下:
<!-- 使用自定義標籤模擬實現<c:forEach>中集合的遍歷功能 -->
<newjueqi:myforEach items="${pageScope.personlist}" var="per">
${per.name } -- ${per.age }<br>
</newjueqi:myforEach>
效果如圖1 所示
下面是正式的程式碼:
1.編寫一個自定義的標籤類。
/**
*完成模擬<c:forEach>標籤遍歷集合的功能
*/
publicvoid doTag() throws JspException, IOException {
// 定義一個迭代器
Iterator i=null;
//如果集合是Colleciton型別
if( itemsinstanceof Collection )
{
//獲取Collection的迭代器
i=( (Collection)items).iterator();
}
//如果集合是陣列型別
elseif( itemsinstanceof Object[] )
{
//用Arrays的靜態方法asList把陣列轉換為一個List集合,由於asList接受的引數
//是可變引數,所以為了防止轉換出錯必須要把傳入的引數強制為陣列
i=Arrays.asList((Object[])items).iterator();
}
else
{
thrownew RuntimeException("不能轉換");
}
//進行迭代
while( i.hasNext() )
{
//取得集合中迭代器指向的物件
Object obj=i.next();
//用setAttribute方法把物件和指定的變數連線起來
//例如標籤中有屬性var="per",標籤體中有EL表示式式:$(per.name)
//寫了下面的一句話後EL表示式就可理解為obj.getName(),表示呼叫的是
//物件相應的getXXX()
pageContext.setAttribute( var, obj );
//執行標籤體的內容
jspFragment.invoke( null );
}
}
2.根據自定義標籤的寫法,首先寫一個tld檔案配置自定義標籤。由於標籤<newjueqi: myforEach>是帶有屬性和標籤體的,所以編寫如下:
<!-- 配置一個自定義標籤 -->
<tag>
<!-- 指定自定義標籤的名字 -->
<name>myforEach</name>
<!-- 指定當前標籤關聯的 Java 類 -->
<tag-class>com.javaeye.newjueqi.MyForEach</tag-class>
<!-- 指定標籤體的型別: -->
<body-content>scriptless</body-content>
<attribute>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
3.在JSP頁面中匯入標籤。
<%@ taglib prefix="newjueqi" uri="http://newjueqi.javaeye.com/myforEach" %>
4.在JSP頁面中使用自定義標籤測試實際的效果。
<!-- 使用自定義標籤模擬實現<c:forEach>中集合的遍歷功能 -->
<newjueqi:myforEach items="${pageScope.personlist}" var="per">
${per.name } -- ${per.age }<br>
</newjueqi:myforEach>
執行的實際效果如圖 1所示
結語:這個自定義標籤遍歷集合的功能還不完善,譬如不能遍歷Map集合中的元素,但它們的編寫思路是一致的, Map集合中需要進一步封裝物件。
相關推薦
在JSP中用自定義標籤實現集合的遍歷——山寨版c:foreach
【文章標題】在JSP中用自定義標籤實現集合的遍歷——山寨版<c:foreach> 【文章作者】曾健生 【作者郵箱】[email protected] 【作者QQ】19067890
jsp tag 自定義標籤實現按鈕的顯示
前些天在一個專案中做了一個最基本的許可權管理(標準的許可權結構,使用者-角色-選單),後來需要精確地控制到按鈕就想到了使用自定義標籤(jsp tag)來處理按鈕的顯示與隱藏。 下面是我參考網上的資料自己寫的一個自定義標籤的demo: 首先自定義標籤類: package c
jsp自定義標籤實現許可權攔截
最近專案需要要實現在頁面端一個許可權攔截功能。具體需求是,一個使用者登陸到系統後,判斷他是否有執行某個功能的許可權,如果有許可權,則功能鍵對該使用者可見;否則的話,不可見。要實現此功能,自定義標籤無疑是一種很好的解決辦法。具體方法如下:(語言java、頁面實現jsp
關於JSP的自定義標籤
前兩天學習了JSP的自定義標籤 ,現在來記述下,加深印象。 一、建立自定義標籤類 自定義標籤類的建立方式有多種,不過還是繼承SimpleTagSupport類比較簡單,沒必要重寫那麼多方法,只需要重寫doTag方法,然後把邏輯處理寫在doTag方法裡。此處是我的三個自定義標籤處理類: C
javaEE JSP,自定義標籤庫,自定義分頁條標籤
WEB-INF/tld/commons.tld(自定義標籤庫的描述): <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, In
spring 自定義標籤實現
Spring 自定義標籤實現 一、自定義Spring標籤簡介 Spring官方文件 42.1中,介紹瞭如何自定義Spring標籤,步驟如下: 1、編寫一個XML Schema描述您的自定義元素 2、編寫自定義名稱空間處理程式實現,實現NamespackHand
Spring自定義標籤實現及踩過的坑(親測)
專案結構 先來一張專案結構圖,因為LZ是用的IDEAL,網上的大部分都是用的eclipse來實現: 這裡也大致說一下專案的新建,考慮到有的讀者會想LZ一樣對IDEAL的使用不是很熟練。 新建一個spring專案(不會的話網上搜索一下,很簡單的),建好之後,再新建這些資料夾,點選File—>Pr
JSP:自定義標籤之標籤
public class IfTag extends SimpleTagSupport { private boolean test; public void setTest(boolean test) { this.test =
(精)Spring IOC核心原始碼學習III:bean標籤和自定義標籤實現原理
本文將解析spring bean定義標籤和自定義標籤的解析實現原理。這裡說的標籤僅限於以xml作為bean定義描述符的spring容器,繼承AbstractXmlApplicationContext的一些子 容器,如XmlApplicationContext、ClassPat
Java Web學習筆記(一)FreeMarker自定義標籤實現生成前端指令碼驗證
最近在學習Java Web因為.net已經寫的想吐了。通過網易雲課堂瞭解了當前常用的SSM框架的使用方法,前期一切都很順利,包括資料庫的訪問、事務提交、物件注入、面向切片等等,但是當我對頁面檢視進行實現時發現相對於.net有一點不方便。Java Web的檢視層的實現方式非常
CSS3中用自定義字型實現小圖示icon
最近在做一個專案時, 研究了一下新浪微博的前端, 看到首頁中那個圖示了嗎, 以前看到這類效果的第一反應就是用一個gif之類的圖示做出來!! 但在研究的過程, 發現了一個小技巧, 注意那個em標籤中的文字是E, 但顯示出來一個類似ICON的圖示. 既然是HTML+CSS
Django自定義標籤實現多級評論
首先在App的目錄下,建一個名為templatetags的Python package(含有init.py) 在templatetags下新建一個名為custom.py的檔案。 這裡用到了遞迴,去
jsp中自定義標籤自動載入下拉框內容
第一步:在web專案下的web-inf的tlds目錄下,新建一個配置檔案,名字為relation.tld,內容如下: 自定義標籤的字首為relation(由short-name標籤決定),屬性有saveField(要儲存到資料庫的欄位名),value(要被選中的資料值)
集合遍歷:for VS foreach
假設我們擁有下面的集合 1 System.Collections.ArrayList list =new System.Collections.ArrayList();2
Map集合的遍歷方式以及TreeMap集合儲存自定義物件實現比較的Comparable和Comparator兩種方式
Map集合的特點 1、Map集合中儲存的都是鍵值對,鍵和值是一一對應的 2、一個對映不能包含重複的值 3、每個鍵最多隻能對映到一個值上 Map介面和Collection介面的不同 Map是雙列集合的根介面,Collection是單列集合的根介面 1、Map是雙列的(是雙列集合的根介
JSP自定義標籤遍歷List (ct:forEach)
問題描述 : jsp 的pageContext域中存在User物件的users列表,想在jsp檔案中遍歷users. <% class User{ private String name; private Strin
實現按鈕級許可權管理--使用jsp自定義標籤
在有些系統中,可能會用到按鈕級的許可權管理。這裡使用jsp自定義標籤來實現。0、基礎配置。建表 ###角色對應的操作按鈕1.1.1角色對應的按鈕關聯表,角色下有哪些按鈕是可以訪問的CREATE TABLE `system_role_operation` ( `role
spring 自定義標籤的實現
在我們進行Spring 框架開發中,估計用到最多的就是bean 標籤吧,其實在Spring中像<mvc/><context/>這類標籤以及在dubbo配置的標籤都是屬於自定義的標籤,標籤的解析,已經由作者就行了解析,我們用就好了,那麼我們今天就進行開發一個自己的標籤,模擬 &
javaweb:JSTL(JSP標準標籤庫)、自定義標籤開發
JSTL 簡介: JSTL的全稱: •JSP Standard Tag Library,JSP標準標籤庫 JSTL的作用: •提供給 Java Web 開發人員一個標準通用的標籤函式庫 •和 EL 來取代傳統直接在頁面上嵌入 Java 程式(Scripting)的做法,
jsp自定義標籤的學習[從學習到工作(五)]
在現在的開發平臺上發現有自己定義的標籤,於是在空閒時間學習了一下自定義標籤,並且做了一個簡單的ajax校驗的text標籤,廢話少說,看下面的步驟和程式碼。 一. jsp頁面包含的內容