步骤如下:
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标签java项目文件. 使用定制标签库使得JSP程序更加简洁、可读性和可维护性大大的提高了。因此JSP定制标签的优势是非常明显的,它被认为是JSP所有特性中最被看好的特性。
自定义标签和自定义jstl函数的具体项目实现
JSTL 以及自定义标签开发相关 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标签:forEach、forTokens 4.URL...
自定义JSTL标签,自动读取数据绑定在控件上。
jstl 自定义标签 int转换为时间格式
JavaWeb-12:自定义标签库开发&JSTL标签库
自己做的一个小例子,实现JSTL自定义标签。功能:输入x和y,点击按钮后循环输出y次x。
利用自定义jstl标签,实现mybatis分页查询
JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大...
这次整理自定义标签主要是项目的需要,要将一些写死的url信息配置于配置文件中,这样发版的时候改动起来相当方便
JSTL 开发自定义标签使用的jar jstl.jar standard.jar
jstl自定义标签和函数思维导图
NULL 博文链接:https://zhouxianglh.iteye.com/blog/858182
jstl标签包,用于jsp自定义标签,内包含jstl.jar standard.jar两个包
jh-plugins是一项基于JSTL的自定义标签(插件)库,致力于打造一处实现、任何项目通用的开源项目。 jh-plugins已实现标签库:分页 jh-plugins特点:高效、轻巧、简单、适用(可融合与任何B/S架构的java项目) jh-...
java中用到的jstl标签 ,大家都知道 jstl自定义标签的很多使用性 所以都喜欢用 但是有些找不到jar包的麻烦
springMVC+maven+ztree+自定义jstl标签+sitemesh装饰 http://localhost:8080/mvc/index.jsp 显示ztree index2.jsp sitemesh装饰与自定义jstl标签
这里是自定义标签,可以很好的实现一定的功能,大家可以参考着自己写一个
EL、JSTL、自定义标签、过滤器的ppt
这个压缩包里有我在学习JSTL自定义标签时写的一些自定义标签实例,如果你也在学JavaWeb技术,那么我相信这些源码会对你有帮助的