`

自定义jstl标签

阅读更多

步骤如下:


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>

 more>>

 

 

 

以下部分转自: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项目文件

    自定义JSTL标签是JSTL功能的一个扩展,允许开发者根据具体需求创建自己的标签,进一步提升项目的定制化程度。本项目包含的"JAVAEE-1-jstl"压缩包文件,很可能是为了解释如何在Java项目中创建和使用自定义JSTL标签。 ...

    自定义JSTL

    **二、创建自定义JSTL标签** 1. **定义标签库**:创建一个名为`mytags.tld`的TLD(Tag Library Descriptor)文件,其中定义了自定义标签的属性、返回类型、行为等信息。例如,定义一个简单的“greeting”标签: ``...

    JSTL 自定义标签

    在开发自定义JSTL标签时,IDE如Eclipse、IntelliJ IDEA提供了很好的支持,它们可以自动生成TLD文件和标签处理类的模板,简化开发流程。 总的来说,自定义JSTL标签是提升JSP应用可扩展性和可维护性的重要手段。通过...

    自定义标签和自定义jstl函数的具体项目实现

    在Java Web开发中,自定义标签和自定义JSTL(JavaServer Pages Standard Tag Library)函数是提升代码可复用性和可维护性的重要工具。它们允许开发者创建自己的语义化标签,以替代复杂的Java脚本或者JSP标签,使得...

    JSTL 以及自定义标签开发相关

    JSTL 以及自定义标签开发相关 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标签:forEach、forTokens 4.URL...

    JSTL自定义标签实例解析

    **JSTL自定义标签实例解析** JavaServer Pages Standard Tag Library (JSTL) 是一套标准的标签库,用于简化JSP开发。JSTL允许开发者使用预定义的标签来处理常见任务,如迭代、条件判断、XML处理等。本文将深入讲解...

    mybatis自定义分页标签

    在MyBatis中,自定义JSTL标签可以让我们在页面上直接调用分页功能,无需在每个Controller中都写分页逻辑。下面我们将分几个步骤来创建这个自定义分页标签: 1. **创建自定义标签库**:首先,我们需要创建一个自定义...

    JSTL 开发自定义标签使用的jar

    在这个场景中,我们重点关注的是JSTL的核心标签库以及如何使用自定义标签。 `jstl.jar`是JSTL的核心库,包含了实现JSTL标准标签功能的类和接口。它提供了控制流标签(如if、choose、when、otherwise)、迭代标签...

    jstl 自定义标签

    JSTL自定义标签允许开发者扩展标准标签库的功能,满足特定需求。自定义标签由三部分组成:标签库描述符(TLD),标签处理类(Tag Handler Class)以及标签体(Tag Body)。 1. **标签库描述符(TLD)**:这是一个XML...

    JavaWeb-12:自定义标签库开发&JSTL标签库

    二、JSTL标签库 JSTL是Java Web开发的标准标签库,它包含五个核心部分:Core、Format、I18N、XML和SQL。这些标签提供了丰富的功能,例如控制流、格式化、国际化、XML处理和数据库操作。 1. **Core标签**:包括if、...

    jstl实现计算器

    表单中的输入元素和选择项应与JSTL标签相配合,以便正确获取和处理用户输入。 6. **错误处理**:为了提高用户体验,还需要考虑错误处理,例如检查输入是否为空、是否为数字、运算符是否有效等。这可以通过`&lt;c:if&gt;`...

    jstl自定义标签,自定义EL表达式

    这次整理自定义标签主要是项目的需要,要将一些写死的url信息配置于配置文件中,这样发版的时候改动起来相当方便

    简单的JSTL例子

    ### 知识点二:自定义JSTL标签 在给定的文件中,我们看到一个自定义的JSTL标签`HelloWorldTag`的实现。这个标签继承自`TagSupport`类,这是一个抽象类,提供了实现JSP标签的基本框架。在`doStartTag()`方法中,我们...

    JSTL标签库需要导入的Jar包

    以下是关于JSTL标签库所需导入的JAR包及其功能的详细解释: 1. **jstl.jar**:这是核心JSTL库,包含了大部分常用的标签,如 `&lt;c:if&gt;`, `&lt;c:forEach&gt;`, `&lt;fmt:formatDate&gt;` 等。这些标签提供了条件判断、循环、格式...

    jstl自定义标签和函数思维导图

    jstl自定义标签和函数思维导图

    JSTL标签库jar包文件

    每个`taglib`元素定义了一个TLD(Tag Library Descriptor)文件的位置,这告诉服务器JSTL标签库的位置和元数据。 总之,JSTL通过提供丰富的标签来增强JSP页面的功能,而解决"无法解析绝对uri"的错误通常涉及到正确...

    jstl.jar和standard.jar

    这个库提供了JSTL标签处理的基础设施,比如TagSupport类,它是所有自定义JSTL标签的基类。 **在项目中的使用:** 在项目中使用JSTL和EL时,需要将jstl.jar和standard.jar这两个JAR文件放入WEB-INF/lib目录下。这是...

    jstl标签包,用于jsp自定义标签

    在"jstl标签包"中,我们主要关注的是两个关键的组件:jstl.jar和standard.jar。 **jstl.jar** 是JSTL的主要库文件,包含了JSTL核心标签库。这个库提供了如条件语句(if/else)、迭代(foreach)、函数调用等功能,...

    jstl标签库jar包

    **JSTL标签库与JAR包详解** JavaServer Pages Standard Tag Library(JSTL)是Java EE领域中用于简化JSP开发的一个重要工具。它提供了一组预定义的标签,帮助开发者更高效地处理常见任务,如迭代、条件判断、国际化...

    jstl标签依赖jar包

    它们包含了JSTL和Standard Taglib的源代码,开发者可以通过查看源码来理解内部实现逻辑,这对于学习和调试自定义标签或者解决某些问题非常有帮助。 为了在项目中使用JSTL,你需要将这两个jar包添加到项目的类路径中...

Global site tag (gtag.js) - Google Analytics