日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java自定义标签遍历_自定义标签 - CarlDing的个人页面 - OSCHINA - 中文开源技术交流社区...

發布時間:2025/3/11 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java自定义标签遍历_自定义标签 - CarlDing的个人页面 - OSCHINA - 中文开源技术交流社区... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EL的不足,由JSTL來加強 ?-> 自定義標簽來實現。

1:自定義標簽

1:自定義標簽也是類。

2:讓用戶在JSP頁面使用,不引用Java代碼的情況下,調用Java代碼。

2:標簽開的類的繼承關系

3:快速的標簽示例

1:創建一個類實現接口Tag

packagecn.tag;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importjavax.servlet.jsp.JspException;

importjavax.servlet.jsp.JspWriter;

importjavax.servlet.jsp.PageContext;

importjavax.servlet.jsp.tagext.Tag;

publicclassDateTagimplementsTag {

/**

* 為了在其他的方法中使用pageContext

*

*/

privatePageContextpageContext;

/**

* 當在頁面上使用了這個標簽,當jsp在運行時,會先調用此方法

* 將pageContext傳遞到DataTag類中類

*/

@Override

publicvoidsetPageContext(PageContextpc) {

this.pageContext=pc;

}

/**

* 當這個標簽開始時,即容器來調用以下的方法標簽的body部分

*/

@Override

publicintdoStartTag()throwsJspException {

// 輸出當前時間,到頁面上去

SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Stringstr=sdf.format(newDate());

// 輸出如果要輸出,獲取JspWriter就可以了

JspWriterout=pageContext.getOut();

try{

out.print("當前時間是:"+str);

}catch(Exceptione) {

e.printStackTrace();

}

/*

* 返回值是有固定值的 這個的返回值,決定了這個標簽后面的body部分如何執行
Tag.EVAL_BODY_INCLUDE

* 執行body部分 SKIP_BODY:不執行body部分不顯示

*/

returnSKIP_BODY;

}

/**

* 當執行標簽結束的時時執行以下的代碼

* 返回的值是: SKIP_PAGE : 頁面的后面的部分,不執行不顯

* EVAL_PAGE : 執行頁面的 后面的部分

*/

@Override

publicintdoEndTag()throwsJspException {

returnEVAL_PAGE;

}

2:添加標簽的配置文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"

version="2.1">

以下是開發完成的完整的配置:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"

version="2.1">

1.0

ql

/ql.com

date

cn.tag.DateTag

empty

3:在JSP頁面上引用

使用:

4:繼承TagSupport

publicclassDate2TagextendsTagSupport {

@Override

publicintdoStartTag()throwsJspException {

Stringstr=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(newDate());

JspWriterout=pageContext.getOut();

try{

out.print("當前的時間為:"+str);

}catch(Exceptione) {

}

returnSKIP_BODY;

}

}

配置:

myDate2

cn.tag.Date2Tag

empty

以下是使用:

5:標簽的功能

功能:

讓程序員在頁面上像是使用HTML標簽一樣,使用Java代碼。

防止重復提交:

以下的情況下,可能會發生重復提交:

1:刷新頁面。

2:服務或是網絡比較慢。

如何防止重復提交:

使用Session

在JSP頁面上,生成一個UUID放放到Session中去。

同時在JSP頁面上,和驗證碼一樣,自動的提交這個UUID.

后臺代碼,從提交信息中,和Session中獲取這個UUID的值比較。

自定義標簽:

publicclassTokenTagextendsTagSupport {

@Override

publicintdoStartTag()throwsJspException {

Stringuuid= UUID.randomUUID().toString().replace("-","");

pageContext.getSession().setAttribute("token",uuid);

// 向頁面上輸出

JspWriterout=pageContext.getOut();

try{

Stringhtml="";

out.print(html);

}catch(Exceptione) {

e.printStackTrace();

}

returnSKIP_BODY;

}

}

配置:

token

cn.tag.TokenTag

empty

6:標簽的細節

JSP

JSP 可以包含任意的JSP代碼

在doStartTag中返回的是skip_body,則有內容也不顯示。

Eval_body_include則顯示,執行body部分內容

Empty : 則不能包含任意的內容

doEndTag的返回值

Skip_page : 頁面的后面的部分不顯示

Eval_page : 則頁面的后面的部分顯示。

7:接收屬性的標簽、

?c前綴 ,out標簽功能 ??value =“...”屬性。

讓標簽接收屬性:

思想:

1:在標簽類里面聲明setXxx方法用于接收屬性的值。

2:在*.tld的配置文件中,聲明這個標簽類有xxx屬性。

3:在JSP頁面上,使用標簽時,設置屬性的值。

修改時間:

- = > ?你好張三,當前時間是:...

name

true

true

java.lang.String

8:遍歷的標簽

${name} - > EL - > 表示:pageContext.findAttribute(“name”);從四個域對象中找

多一個方法 :

packagecn.tag;

importjava.lang.reflect.Array;

importjava.util.ArrayList;

importjava.util.Collection;

importjava.util.Iterator;

importjava.util.List;

importjava.util.Map;

importjavax.servlet.jsp.JspException;

importjavax.servlet.jsp.tagext.TagSupport;

publicclassForTagextendsTagSupport {

// 聲明一個可以遍歷的對象

privateIteratorit;

publicvoidsetItems(Objectobj) {

if(objinstanceofCollection) {// List/Set

it=((Collection)obj).iterator();

}elseif(objinstanceofMap) {

it=((Map)obj).entrySet().iterator();

}elseif(obj.getClass().isArray()) {

// 獲取數組的長度

intlen= Array.getLength(obj);

Listlist=newArrayList();

for(inti= 0;i

Objectval= Array.get(obj,i);

list.add(val);

}

it=list.iterator();

}else{

thrownewRuntimeException("不接收的類型"+obj.getClass());

}

}

privateStringvar;

publicvoidsetVar(Stringvar) {

this.var=var;

}

@Override

publicintdoStartTag()throwsJspException {

if(it.hasNext()) {

// 獲取這什個值

pageContext.setAttribute(var,it.next());

returnEVAL_BODY_INCLUDE;

}else{

returnSKIP_BODY;

}

}

@Override

publicintdoEndTag()throwsJspException {

pageContext.removeAttribute(var);

returnEVAL_PAGE;

}

@Override

publicintdoAfterBody()throwsJspException {

if(it.hasNext()) {

// 獲取這什個值

pageContext.setAttribute(var,it.next());

returnEVAL_BODY_AGAIN;

}else{

returnSKIP_BODY;

}

}

}

for

cn.tag.ForTag

JSP

items

true

true

java.lang.Object

var

true

false

java.lang.String

a

9:使用simpletagsupport實現

publicclassHelloTagextendsSimpleTagSupport {

@Override

publicvoiddoTag()throwsJspException, IOException {

Stringstr=newDate().toLocaleString();

JspWriterout= getJspContext().getOut();

out.print("你好當前時間是:"+str);

}

}

hello

cn.tag.HelloTag

empty

接收屬性,就是聲明

setXxx,修改tld文件,在頁面上傳遞

privateStringname;

publicvoidsetName(Stringname) {

this.name=name;

}

hello

cn.tag.HelloTag

empty

name

yes

true

java.lang.String

總結

以上是生活随笔為你收集整理的java自定义标签遍历_自定义标签 - CarlDing的个人页面 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。