本文主要分享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了。