jsp⾃定义标签中的Function函数
在taglib中我们发现有⼀个标签叫做<function>,这次简单介绍<function>标签的基本⽤法,<function>标签可以做什么呢?
它可以让我们在jsp⽤直接调⽤某个⽅法,根据⾃定义的⽅法返回指定的值,兼容jstl标签,省去了在jsp中直接使⽤<%!%>来定义⽅法体再调⽤的繁琐.
如果你⽤过el语⾔的话估计会很快上⼿,其实<function>标签就是⼀个拥有⽅法体的el语⾔.
注意:function所定义的⽅法必须需要是静态的,如果不是静态的话jstl是不能识别所定义的⽅法.
Java代码如下:
package org.lxh.taglib;
import java.util.List;
public class FunctionTag {
public static String hello(String name) {
return name;
}
public static Integer bbq(List list) {
return list.size();
}
}
⽅法必须静态,可以定义有返回值或者void类型的⽅法.
tld:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="java.sun/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="java.sun/xml/ns/j2ee java.sun/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"jsp定义
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>my</short-name>
<uri>lauedward.spaces.live</uri>
<function>
<!--EL页⾯调⽤名字-->
<name>hello</name>
<!--指定标签的处理类,指定了标签由哪个Java类来处理。-->
<function-class>org.lxh.taglib.FunctionTag</function-class>
<!--指定EL页⾯调⽤名字中实际调⽤的⽅法.指定处理类的实际⽅法.参数和回调函数要写完整路径-->
<function-signature>java.lang.String hello(java.lang.String)</function-signature>
</function>
<function>
<name>bbq</name>
<function-class>org.lxh.taglib.FunctionTag</function-class>
<function-signature>java.lang.Integer bbq(java.util.List)</function-signature>
</function>
</taglib>
注意:在<function-signature>需要写完整的类名,假如是String类型的话就必须写java.lang.String这样字,不⽀持泛型的定义如
java.util.List<java.lang.String>eclipse会把<>当作xml的格式来判断的,所以就省略该泛型的定义.
jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="my" uri="/WEB-INF/tld/testFunction.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ">
<%@page import="java.util.*"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
List<String> list = new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
request.setAttribute("list", "helloword");
request.setAttribute("name", list);
Map map = new HashMap();
map.put("1","a");
map.put("2","b");
map.put("3","c");
map.put("4","d");
%>
<br>
${my:hello(list)}
<br>
${my:bbq(name)}
<br>
</body>
</html>
注意:调⽤⽅法的时候必须类型要传⼊相同类型的值,否则的话会报错,不过对于⽅法体是String的话,是可以传⼊list,set,map那些,因为传⼊后会直接调⽤list的.toString()⽅法直接当字符串输出.