自定义标签

本文介绍了如何通过创建标签处理器类、配置标签库描述文件并在JSP页面中使用来自定义JSP标签。涵盖SimpleTag接口的实现及生命周期,以及如何为标签添加属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.helloworld

①. 创建一个标签处理器类 

实现 SimpleTag 接口. 


②. 在 WEB-INF 文件夹下新建一个 .tld(标签库描述文件) 为扩展名的 xml 文件. 并拷入固定的部分

并对 description, display-name, tlib-version, short-name, uri 做出修改

<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>JSTL 1.1 core library</description>
  <display-name>JSTL core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>c</short-name>
  <uri>http://java.sun.com/jsp/jstl/core</uri>
  
</taglib>

③. 在 tld 文件中描述自定义的标签

<!-- 描述自定义的 HelloSimpleTag 标签 -->
  <tag>
  	<!-- 标签的名字: 在 JSP 页面上使用标签时的名字 -->
  	<name>hello</name>
  	
  	<!-- 标签所在的全类名 -->
  	<tag-class>com.atguigu.javaweb.tag.HelloSimpleTag</tag-class>
  	<!-- 标签体的类型 -->
  	<body-content>empty</body-content>
  </tag>
  ④. 在 JSP 页面上使用自定义标签: 


使用 taglib 指令导入标签库描述文件: <%@taglib uri="http://www.atguigu.com/mytag/core" prefix="atguigu" %>

使用自定义的标签: <atguigu:hello/> 

2.setJspContext

一定会被 JSP 引擎所调用, 先于 doTag, 把代表 JSP 引擎的 pageContext 传给标签处理器类. 

private PageContext pageContext;
	
@Override
public void setJspContext(JspContext arg0) {
	System.out.println(arg0 instanceof PageContext);  
	this.pageContext = (PageContext) arg0;
}

3.带属性的自定义标签


①. 先在标签处理器类中定义 setter 方法. 建议把所有的属性类型都设置为 String 类型. 

private String value;
private String count;


public void setValue(String value) {
	this.value = value;
}


public void setCount(String count) {
	this.count = count;
}


②. 在 tld 描述文件中来描述属性

<!-- 描述当前标签的属性 -->
<attribute>
	<!-- 属性名, 需和标签处理器类的 setter 方法定义的属性相同 -->
	<name>value</name>
	<!-- 该属性是否被必须 -->
	<required>true</required>
	<!-- rtexprvalue: runtime expression value 
		当前属性是否可以接受运行时表达式的动态值 -->
	<rtexprvalue>true</rtexprvalue>
</attribute>

③. 在页面中使用属性, 属性名同 tld 文件中定义的名字. 


<atguigu:hello value="${param.name }" count="10"/>



实现SimpleTag接口的标签处理器类的生命周期

如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值