步骤如下:
1、写tld文档:用来指定标签的名字,标签库等。
2、写标签处理器类。
3、配置到web.xml中
4、在jsp中使用新定义的标签
例:实现一个自定义标签 功能如下 如果字符串长度超过规定长,则截取,并根据要求添加省略号
tls文档:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>ip</short-name> <uri>http://www.xx.tag</uri> <tag> <name>stringCut</name> <tag-class>com.xx.utils.jstl.JSTLStringCut</tag-class> <attribute> <name>str</name> <required>false</required> <rtexprvalue>true</rtexprvalue><!-- 是否支持el表达式 --> <type>java.lang.String</type> <description>輸入字符串</description> </attribute> <attribute> <name>length</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.Integer</type> <description>要显示字符串的长度</description> </attribute> <attribute> <name>showDot</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.Boolean</type> <description>是否显示点号</description> </attribute> </tag> </taglib>
标签处理器类:
package com.xx.utils.jstl; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; public class JSTLStringCut extends BodyTagSupport{ private String str ; private Integer length ; private Boolean showDot; @Override public int doStartTag() throws JspException { System.out.println(str); System.out.println(length); System.out.println(showDot); try { if(str==null){ //do nothing }else{ if(str.length()>length){ str=str.substring(0,length); if(showDot){ str=str+"..."; } } pageContext.getOut().print(str); } } catch (IOException e) { e.printStackTrace(); } return BodyTagSupport.EVAL_BODY_INCLUDE;//执行标签内容 } @Override public int doEndTag() throws JspException { return BodyTagSupport.EVAL_BODY_INCLUDE; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public Integer getLength() { return length; } public void setLength(Integer length) { this.length = length; } public Boolean getShowDot() { return showDot; } public void setShowDot(Boolean showDot) { this.showDot = showDot; } }
配置到web.xml
<jsp-config> <taglib> <taglib-uri>http://www.xx.tag</taglib-uri> <taglib-location>/WEB-INF/tags/string-cut.tld</taglib-location> </taglib> </jsp-config>
jsp中使用标签
jsp页面顶部加入:
<%@ taglib uri="http://www.xx.tag" prefix="ip" %>
<ip:stringCut str="${str}" length="10" showDot="true"></ip:stringCut>
以下部分转自:http://oyprunner.iteye.com/blog/539494
EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用 EVAL_PAGE:继续处理页面,doEndTag()函数可用 SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用 SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用 EVAL_BODY_TAG:已经废止,由EVAL_BODY_BUFFERED取代 EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法
BodyTagSupport类的方法: 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(); 他们执行顺序如下: doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag() doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY, 如果返回EVAL_BODY_INCLUDE则继续执行; 如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行, 而直接执行doEndTag()方法。 setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。 标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY, EVAL_PAGE或SKIP_PAGE。 如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分; 如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。 标签中静态常量: EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流 SKIP_BODY:告诉服务器不要处理正文内容 EVAL_PAGE:让服务器继续执行页面 SKIP_PAGE:让服务器不要处理剩余的页面 EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回 EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回 EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。
相关推荐
自定义JSTL标签是JSTL功能的一个扩展,允许开发者根据具体需求创建自己的标签,进一步提升项目的定制化程度。本项目包含的"JAVAEE-1-jstl"压缩包文件,很可能是为了解释如何在Java项目中创建和使用自定义JSTL标签。 ...
**二、创建自定义JSTL标签** 1. **定义标签库**:创建一个名为`mytags.tld`的TLD(Tag Library Descriptor)文件,其中定义了自定义标签的属性、返回类型、行为等信息。例如,定义一个简单的“greeting”标签: ``...
在开发自定义JSTL标签时,IDE如Eclipse、IntelliJ IDEA提供了很好的支持,它们可以自动生成TLD文件和标签处理类的模板,简化开发流程。 总的来说,自定义JSTL标签是提升JSP应用可扩展性和可维护性的重要手段。通过...
在Java Web开发中,自定义标签和自定义JSTL(JavaServer Pages Standard Tag Library)函数是提升代码可复用性和可维护性的重要工具。它们允许开发者创建自己的语义化标签,以替代复杂的Java脚本或者JSP标签,使得...
JSTL 以及自定义标签开发相关 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标签:forEach、forTokens 4.URL...
**JSTL自定义标签实例解析** JavaServer Pages Standard Tag Library (JSTL) 是一套标准的标签库,用于简化JSP开发。JSTL允许开发者使用预定义的标签来处理常见任务,如迭代、条件判断、XML处理等。本文将深入讲解...
在MyBatis中,自定义JSTL标签可以让我们在页面上直接调用分页功能,无需在每个Controller中都写分页逻辑。下面我们将分几个步骤来创建这个自定义分页标签: 1. **创建自定义标签库**:首先,我们需要创建一个自定义...
在这个场景中,我们重点关注的是JSTL的核心标签库以及如何使用自定义标签。 `jstl.jar`是JSTL的核心库,包含了实现JSTL标准标签功能的类和接口。它提供了控制流标签(如if、choose、when、otherwise)、迭代标签...
JSTL自定义标签允许开发者扩展标准标签库的功能,满足特定需求。自定义标签由三部分组成:标签库描述符(TLD),标签处理类(Tag Handler Class)以及标签体(Tag Body)。 1. **标签库描述符(TLD)**:这是一个XML...
二、JSTL标签库 JSTL是Java Web开发的标准标签库,它包含五个核心部分:Core、Format、I18N、XML和SQL。这些标签提供了丰富的功能,例如控制流、格式化、国际化、XML处理和数据库操作。 1. **Core标签**:包括if、...
表单中的输入元素和选择项应与JSTL标签相配合,以便正确获取和处理用户输入。 6. **错误处理**:为了提高用户体验,还需要考虑错误处理,例如检查输入是否为空、是否为数字、运算符是否有效等。这可以通过`<c:if>`...
这次整理自定义标签主要是项目的需要,要将一些写死的url信息配置于配置文件中,这样发版的时候改动起来相当方便
### 知识点二:自定义JSTL标签 在给定的文件中,我们看到一个自定义的JSTL标签`HelloWorldTag`的实现。这个标签继承自`TagSupport`类,这是一个抽象类,提供了实现JSP标签的基本框架。在`doStartTag()`方法中,我们...
以下是关于JSTL标签库所需导入的JAR包及其功能的详细解释: 1. **jstl.jar**:这是核心JSTL库,包含了大部分常用的标签,如 `<c:if>`, `<c:forEach>`, `<fmt:formatDate>` 等。这些标签提供了条件判断、循环、格式...
jstl自定义标签和函数思维导图
每个`taglib`元素定义了一个TLD(Tag Library Descriptor)文件的位置,这告诉服务器JSTL标签库的位置和元数据。 总之,JSTL通过提供丰富的标签来增强JSP页面的功能,而解决"无法解析绝对uri"的错误通常涉及到正确...
这个库提供了JSTL标签处理的基础设施,比如TagSupport类,它是所有自定义JSTL标签的基类。 **在项目中的使用:** 在项目中使用JSTL和EL时,需要将jstl.jar和standard.jar这两个JAR文件放入WEB-INF/lib目录下。这是...
在"jstl标签包"中,我们主要关注的是两个关键的组件:jstl.jar和standard.jar。 **jstl.jar** 是JSTL的主要库文件,包含了JSTL核心标签库。这个库提供了如条件语句(if/else)、迭代(foreach)、函数调用等功能,...
**JSTL标签库与JAR包详解** JavaServer Pages Standard Tag Library(JSTL)是Java EE领域中用于简化JSP开发的一个重要工具。它提供了一组预定义的标签,帮助开发者更高效地处理常见任务,如迭代、条件判断、国际化...
它们包含了JSTL和Standard Taglib的源代码,开发者可以通过查看源码来理解内部实现逻辑,这对于学习和调试自定义标签或者解决某些问题非常有帮助。 为了在项目中使用JSTL,你需要将这两个jar包添加到项目的类路径中...