自定义JSP标签和JSTL函数

 本文主要分享jsp自定义标签和jstl自定义函数。

1-处理类

JSP自定义标签的处理类

public class StringTag extends TagSupport{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String content; //字符串内容
	private int count; //字符串个数
	private String append;
	
	public int doStartTag(){
		try {
			pageContext.getOut().print(substring(content,count,append));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return SKIP_BODY;
	}
	
	public int doEndTag(){
		//执行后续的jsp页面内容
		return EVAL_PAGE;
	}
	
	public static String substring(String text, int length, String append) {
		if (StringUtils.isBlank(text) || text.length() < length) {
			return text;
		}
		int num = 0, i = 0, len = text.length();
		StringBuilder sb = new StringBuilder();
		for (; i < len; i++) {
			char c = text.charAt(i);
			if (c > 127) {
				num += 2;
			} else {
				num++;
			}
			if (num <= length * 2) {
				sb.append(c);
			}
			if (num >= length * 2) {
				break;
			}
		}
		if (i + 1 < len && StringUtils.isNotBlank(append)) {
			if (text.charAt(i) > 127) {
				sb.setLength(sb.length() - 1);
			} else {
				sb.setLength(sb.length() - 2);
			}
			sb.append(append);
		}
		return sb.toString();
	}

	//省去get,set方法
	
}

JSTL自定义函数处理类  

import org.apache.commons.lang3.StringUtils;

public abstract class StringHandler {
	
	public static String stringCut(String content, int count) {
		return stringCut(content, count, null);
	}
	
	public static String stringCut(String content, int count, String replace) {
		if (StringUtils.isBlank(content) || content.length() < count) {
			return content;
		}
		int num = 0, i = 0, len = content.length();
		StringBuilder buf = new StringBuilder();
		for (; i < len; i++) {
			char c = content.charAt(i);
			if (c > 127) {
				num += 2;
			} else {
				num++;
			}
			if (num <= count * 2) {
				buf.append(c);
			}
			if (num >= count * 2) {
				break;
			}
		}
		if (i + 1 < len && StringUtils.isNotBlank(replace)) {
			if (content.charAt(i) > 127) {
				buf.setLength(buf.length() - 1);
			} else {
				buf.setLength(buf.length() - 2);
			}
			buf.append(replace);
		}
		return buf.toString();
	}
	
}

2-定义tld文件 

cus_fn.tld

<?xml version="1.0" encoding="UTF-8" ?>
<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 fn library</description>
	<display-name>JSTL fu</display-name>
	<tlib-version>1.1</tlib-version>
	<short-name>fn</short-name>
	<uri>http://www.cnblogs.com/zhouxyx/functionsc</uri>
	
	<function>
		<name>string_cut</name>
		<function-class>org.zxy.tutorial.d130819.StringHandler</function-class>
		<function-signature>boolean stringCut(java.lang.String,int,java.lang.String)</function-signature>
	</function>
	
</taglib>

utils.tld

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" >

<taglib>
	<tlib-version>utils1.0</tlib-version>
	<jsp-version>2.0</jsp-version>
	<short-name>utils</short-name>
	<uri>http://www.cnblogs.com/zhouxyx/utils</uri>
	
	<tag>
		<name>str</name>
		<tag-class>org.zxy.tutorial.d130819.StringTag</tag-class>
		<body-content>empty</body-content>
		<attribute>
			<name>content</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>count</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>append</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

接下来我们在jsp页面运用我们定义的标签和函数

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="u" uri="http://www.cnblogs.com/zhouxyx/utils" %>    
<%@ taglib prefix="fn" uri="http://www.cnblogs.com/zhouxyx/functionsc" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>custom tag</title>
</head>
<body>
	<u:fmt param="yyyy/MM/dd HH:mm:ss" date="${date}" /><br/>
   <hr>	
	<u:str append="....." count="20" content="${str }"/>
	<br/>
	<span style="font-size:18px;color:#339966;font-weight: bold;">JSTL Custom Function</span><br/>
	${fn:string_cut(str,10,'...')}
</body>
</html>

  创建一个servlet,并设置一些简单的测试数据即可。效果如下:

3-总结

  如果我们在项目中有一些特殊的需求,并且已有的方法运用起来比较麻烦。从今天开始你不妨试着用用。总而言之,套路是一样的,能举一反三就OK了。

 

转载于:https://www.cnblogs.com/zhouxyx/p/3267603.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值