在做jsp页面的开发过程中,有时对页面传递需要进行简单验证和处理等操作,jstl满足了很多基本的参数处理方法,如下jsp页面引入的jstl标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
使用基本的jstl需要引入相应的jar,jstl.jar、standard.jar
我使用的是maven项目,在这里给出pom.xml的配置,如下:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
但是jstl所提供给我们的方法往往不能够满足我们产品经理的胃口(产品经理总是会提出一些奇葩的问题),有时方法的复用率会很高,用ajax进行请求后台很显然不是一个明智的方法,而且ajax会造成大量的网络访问,会降低系统的性能。在这种情况下,定制自己的jstl标签,就成为我们的不二选择。
在这里简单的介绍一下自定jstl标签的基本步骤,如下:
1、在web.xml中添加相应的配置:
<!-- JSP自定义标签 开始 -->
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/tld/portal.tld</taglib-uri>
<taglib-location>/WEB-INF/tld/portal.tld</taglib-location>
</taglib>
</jsp-config>
<!-- JSP自定义标签结束 -->
简单的说明一下这个配置
taglib-uri:表示页面上需要引用的地址,这里以页面引用的uri属性相对应
taglib-location:绑定自定义标签项目中的位置
2、创建自己的tld标签文件,portal.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>portal library</description>
<display-name>portal library</display-name>
<tlib-version>1.0</tlib-version>
<short-name>p</short-name>
<uri>http://java.sun.com/jsp/jstl/functions</uri>
<function>
<description>
wipeRepetition去除String中的重复项
</description>
<name>wipeRepetition</name>
<function-class>com.cyz.sjms.function.Functions</function-class>
<function-signature>java.lang.String wipeRepetition(java.lang.String)</function-signature>
<example>
Name: ${p:wipeRepetition(str)}
</example>
</function>
</taglib>
3、创建com.cyz.sjms.function.Functions方法类,这个里面可以自定逻辑,如下:
package com.cyz.sjms.function;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Maps;
public class Functions {
/**
* 去除List中重复项
* @param str
* @return
*/
public static String wipeRepetition(String str){
System.err.println("Str"+str);
if(str == null || "".equals(str) || "null".equals(str)){
return "";
}
String[] s=StringUtils.split(str, "\\\\|");
//该处使用Set去除重复
Map<String, String> ss=Maps.newHashMap();
for (String string : s) {
ss.put(string,"");
}
return StringUtils.join(ss.keySet().toArray(), "、", 0, ss.keySet().size());
}
}
4、在页面上调用:
引入自定义标签并给个标签符号“p”:<%@ taglib prefix="p" uri="/WEB-INF/tld/portal.tld"%>
调用标签方法: ${p:wipeRepetition("111|111|22|33") }