最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java自定義標(biāo)簽用法實(shí)例分析

 更新時(shí)間:2017年11月08日 14:24:37   作者:目盡地平線  
這篇文章主要介紹了Java自定義標(biāo)簽用法,結(jié)合實(shí)例形式分析了java自定義標(biāo)簽的定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

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

簡單例子

實(shí)現(xiàn)一個(gè)標(biāo)簽分為兩步:(1)繼承SimpleTagSupport或TagSupport實(shí)現(xiàn)一個(gè)控制器(2)創(chuàng)建一個(gè)描述標(biāo)簽的tld文件。下面是一個(gè)簡單例子:

(1)實(shí)現(xiàn)一個(gè)標(biāo)簽控制器,向頁面輸出“hello”:

public class Test extends SimpleTagSupport{
 public void doTag() throws IOException{
  JspWriter out = getJspContext().getOut();
  out.write("hello");
 }
}

(2)在WEB-INF文件夾下創(chuàng)建一個(gè)custom.tld文件:

<?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>標(biāo)簽描述一個(gè)自定義標(biāo)簽,<body-content>empty</body-content>表示這個(gè)標(biāo)簽沒有標(biāo)簽體,也就是開始標(biāo)簽和結(jié)束標(biāo)簽之間沒有內(nèi)容。

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

<%@taglib prefix="my" uri="/WEB-INF/custom.tld" %>
<!DOCTYPE html>
<html>
<head>
<title>標(biāo)簽</title>
</head>
<body>
 <p>沒有標(biāo)簽體,直接輸出內(nèi)容的標(biāo)簽</p>
 <my:Hello/>
</body>
</html>

繼承SimpleTagSupport定義簡單標(biāo)簽

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

下面是一些例子:

定義標(biāo)簽屬性

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

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文件里添加這個(gè)屬性的描述,用<attribute>標(biāo)簽:

<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>標(biāo)簽有多個(gè)子標(biāo)簽可以用來定義該屬性的限制:

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

定義標(biāo)簽體

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

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

<!-- 獲取標(biāo)簽體,輸出 -->
 <tag>
  <name>Hello</name>
  <tag-class>com.huanle.utils.tags.Test</tag-class>
  <body-content>scriptless</body-content>
 </tag>

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

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));
 }
}

使用時(shí)就可以包含標(biāo)簽體了:

<my:Hello>hello</my:Hello>

繼承TagSupport實(shí)現(xiàn)更復(fù)雜的標(biāo)簽
(后面更新。。。)

在標(biāo)簽內(nèi)部使用request

標(biāo)簽屬于其實(shí)最終會(huì)轉(zhuǎn)化成一個(gè)Servlet,所有Servlet能做的標(biāo)簽都能做,包括操作request,session等,其中關(guān)鍵就在getJspContext()方法上。代碼如下:

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);
  ...
 }
}

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java實(shí)現(xiàn)一個(gè)接口調(diào)取另一個(gè)接口(接口一調(diào)取接口二)

    java實(shí)現(xiàn)一個(gè)接口調(diào)取另一個(gè)接口(接口一調(diào)取接口二)

    這篇文章主要介紹了java實(shí)現(xiàn)一個(gè)接口調(diào)取另一個(gè)接口(接口一調(diào)取接口二),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java之JFrame輸出Helloworld實(shí)例

    Java之JFrame輸出Helloworld實(shí)例

    這篇文章主要介紹了Java之JFrame輸出Helloworld的方法,以輸出Helloworld的實(shí)例分析了JFrame的簡單入門技巧,需要的朋友可以參考下
    2015-02-02
  • springboot整合redis配置詳細(xì)示例代碼

    springboot整合redis配置詳細(xì)示例代碼

    Redis是一種高性能的鍵值存儲(chǔ)數(shù)據(jù)庫,而Spring Boot是一個(gè)簡化了開發(fā)過程的Java框架,將兩者結(jié)合可以輕松地在Spring Boot項(xiàng)目中使用Redis來實(shí)現(xiàn)數(shù)據(jù)緩存、會(huì)話管理和分布式鎖等功能,這篇文章主要給大家介紹了關(guān)于springboot整合redis配置的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 一文帶你搞定SpringBoot Log4j2日志配置文件

    一文帶你搞定SpringBoot Log4j2日志配置文件

    在項(xiàng)目推進(jìn)中,如果說第一件事是搭建 Spring 框架的話,那么第二件事情就是在 Sring 基礎(chǔ)上搭建日志框架,本文我們就來學(xué)習(xí)一下SpringBoot如何通過Log4j2配置日志吧
    2025-04-04
  • JAVA(MAVEN項(xiàng)目)添加JUnit依賴配置全過程

    JAVA(MAVEN項(xiàng)目)添加JUnit依賴配置全過程

    在Maven項(xiàng)目中進(jìn)行單元測(cè)試是確保代碼質(zhì)量的重要步驟,本教程提供SpringBoot和微服務(wù)平臺(tái)適用的單元測(cè)試方法,包括環(huán)境準(zhǔn)備、創(chuàng)建測(cè)試類、JUnit簡介及注解使用,環(huán)境準(zhǔn)備涉及引入依賴和安裝JUnit插件,測(cè)試類創(chuàng)建可通過快捷鍵或手動(dòng)添加@Test注解來實(shí)現(xiàn)
    2024-10-10
  • Spring之底層架構(gòu)核心概念Environment及用法詳解

    Spring之底層架構(gòu)核心概念Environment及用法詳解

    這篇文章主要介紹了Spring之底層架構(gòu)核心概念-Environment,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 如何使用Java在excel單元格中設(shè)置超鏈接

    如何使用Java在excel單元格中設(shè)置超鏈接

    這篇文章主要介紹了如何使用Java在excel單元格中設(shè)置超鏈接,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java 中迭代器的使用方法詳解

    java 中迭代器的使用方法詳解

    這篇文章主要介紹了java 中迭代器的使用方法詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • springboot中的controller參數(shù)映射問題小結(jié)

    springboot中的controller參數(shù)映射問題小結(jié)

    這篇文章主要介紹了springboot中的controller參數(shù)映射問題小結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • MyBatis-Plus中最簡單的查詢操作教程(Lambda)

    MyBatis-Plus中最簡單的查詢操作教程(Lambda)

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus中最簡單的查詢操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

湟中县| 封开县| 丘北县| 油尖旺区| 汕头市| 淮阳县| 台湾省| 桑日县| 西充县| 隆化县| 宣威市| 忻州市| 延津县| 台北市| 房产| 抚远县| 罗城| 新密市| 光山县| 清苑县| 清远市| 岳阳市| 衡阳市| 厦门市| 珲春市| 伊川县| 丹凤县| 阜宁县| 格尔木市| 招远市| 丰台区| 高要市| 农安县| 铁力市| 施甸县| 尉氏县| 峨山| 洪泽县| 简阳市| 山丹县| 和田市|