一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java自定義標簽用法實例分析

Java自定義標簽用法實例分析

2021-02-01 12:05目盡地平線 Java教程

這篇文章主要介紹了Java自定義標簽用法,結合實例形式分析了java自定義標簽的定義、使用方法與相關注意事項,需要的朋友可以參考下

本文實例講述了Java自定義標簽用法。分享給大家供大家參考,具體如下:

簡單例子

實現一個標簽分為兩步:(1)繼承SimpleTagSupport或TagSupport實現一個控制器(2)創建一個描述標簽的tld文件。下面是一個簡單例子:

(1)實現一個標簽控制器,向頁面輸出“hello”:

?
1
2
3
4
5
6
public class Test extends SimpleTagSupport{
 public void doTag() throws IOException{
  JspWriter out = getJspContext().getOut();
  out.write("hello");
 }
}

(2)在WEB-INF文件夾下創建一個custom.tld文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
 <tlib-version>1.0</tlib-version>
 <jsp-version>2.0</jsp-version>
 <short-name>my</short-name>
 <!-- 直接顯示hello -->
 <tag>
  <name>Hello</name>
  <tag-class>com.huanle.utils.tags.Test</tag-class>
  <body-content>empty</body-content>
 </tag>
</taglib>

上面代碼通過<tag>標簽描述一個自定義標簽,<body-content>empty</body-content>表示這個標簽沒有標簽體,也就是開始標簽和結束標簽之間沒有內容。

接下就可以在jsp文件中使用這個標簽了(記得使用<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %>指令導入標簽庫):

?
1
2
3
4
5
6
7
8
9
10
11
<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %>
<!DOCTYPE html>
<html>
<head>
<title>標簽</title>
</head>
<body>
 <p>沒有標簽體,直接輸出內容的標簽</p>
 <my:Hello/>
</body>
</html>

繼承SimpleTagSupport定義簡單標簽

繼承SimpleTagSupport,然后實現doTag()方法就可以自定義一個標簽。這里有份英文教程,對繼承SimpleTagSupport方式講得非常透徹淺顯易懂,本站下載鏈接。

下面是一些例子:

定義標簽屬性

(1)首先在控制器里填加一個屬性,并生成setter 方法

?
1
2
3
4
5
6
7
8
9
10
public class Test extends SimpleTagSupport{
 private String name;
 public void doTag() throws IOException{
  JspWriter out= getJspContext().getOut();
  out.write("hello");
 }
 public void setName(String name) {
  this.name = name;
 }
}

(2)在tld文件里添加這個屬性的描述,用<attribute>標簽:

?
1
2
3
4
5
6
7
8
<tag>
  <name>Hello</name>
  <tag-class>com.huanle.utils.tags.Test</tag-class>
  <body-content>empty</body-content>
  <attribute>
   <name>name</name>
  </attribute>
</tag>

<attribute>標簽有多個子標簽可以用來定義該屬性的限制:

 

名稱 用處
name 定義屬性名
required 定義該屬性是否是必須的,默認是false
rtexprvalue 定義是否允許使用一個運行時表達式的值作為該屬性的值,默認為false。比如要支持EL表達式,這個屬性應該置為true
type 定義屬性的值類型,默認是String
fragment 聲明這個變量是否應該被看做JspFragment.

 

定義標簽體

之前定義的標簽標簽體一直都是空的,如果要支持標簽體:

(1)修改tld文件的<body-content>值為scriptless,表示有標簽體,并且標簽體不含腳本(指jsp腳本,EL表達式等)

?
1
2
3
4
5
6
<!-- 獲取標簽體,輸出 -->
 <tag>
  <name>Hello</name>
  <tag-class>com.huanle.utils.tags.Test</tag-class>
  <body-content>scriptless</body-content>
 </tag>

(2)在標簽控制器中獲得標簽體并輸出:

?
1
2
3
4
5
6
7
public class Test extends SimpleTagSupport {
 private StringWriter sw = new StringWriter();
 public void doTag() throws JspException, IOException{
  getJspBody().invoke(sw);   
  getJspContext().getOut().write(sw.toString().trim().substring(0, length));
 }
}

使用時就可以包含標簽體了:

?
1
<my:Hello>hello</my:Hello>

繼承TagSupport實現更復雜的標簽
(后面更新。。。)

在標簽內部使用request

標簽屬于其實最終會轉化成一個Servlet,所有Servlet能做的標簽都能做,包括操作request,session等,其中關鍵就在getJspContext()方法上。代碼如下:

?
1
2
3
4
5
6
7
8
9
public class DispalyErrorMessageTag extends SimpleTagSupport {
 public void doTag() throws IOException{
  JspWriter out = getJspContext().getOut();
  PageContext pageContext = (PageContext)getJspContext();
  HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
  String value = request.getParameter(param);
  ...
 }
}

希望本文所述對大家java程序設計有所幫助。

原文鏈接:http://blog.csdn.net/ruangong1203/article/details/51101043

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美亚洲国产精品久久久 | 無码一区中文字幕少妇熟女H | 欧美在线视频一区在线观看 | ady@ady9.映画网| 成人亚洲欧美日韩中文字幕 | chinese特色video| 欧美香蕉人人人人人人爱 | 亚洲国产精久久久久久久 | 国产亚洲精品一区在线播 | 亚洲码在线观看 | 美女草b| 国产成人精视频在线观看免费 | 日韩毛片免费 | 艹艹逼 | 亚洲网站在线 | 亚洲成av人片天堂网 | aaa毛片在线| 色综合图片| 亚洲精品乱码久久久久久蜜桃图片 | 国产视频久久久久 | 日韩大片免费看 | 问一问免费咨询 | 香蕉国产人午夜视频在线 | 欧美精品久久久亚洲 | 日本免费的一级绿象 | 国产在线观看福利 | 久久理论片 | 超级乱淫伦短篇在车上 | 99re在线视频观看 | 欧美一级级a在线观看 | 日本免费观看的视频在线 | 67194最新网址| 婷婷色六月 | 果冻传媒在线免费观看 | 色色色资源站 | 国产拍拍拍 | 精品久久久久中文字幕日本 | 日本激情在线 | 二区免费视频 | 男人操美女逼视频 | 国产在线观看91 |