JSP的自定义标签(四)之定义函数

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="color:#ffffff;"></span></span><p>
</p>

前面我们学习了标签的相关知识,现在笔者将向大家介绍如何将自定义标签与表达式语言一起用,而这里的用法会更难一点,那就是要用标签定义函数,并在JSP的页面中用表达式语言调用。

1. 开发函数处理类

       函数处理类就是普通类,这个普通类中包含若干个静态方法,每上静态方法都可以定义成一个函数。下面我们定义一个类Functions.java,并将它放在com.linjw.function中。

public class Functions
{
	// 对字符串进行反转
	public static String reverse( String text )
	{
		return new StringBuffer( text ).reverse().toString();
	}
	// 统计字符串的个数
	public static int countChar( String text )
	{
		return text.length();
	}
}

2. 使用标签库定义函数

定义函数的方法与定义标签的方法大致相似,不过这里要说明三个子元素:

(1).        name:指定自定义函数的函数名

(2).        function-class:指定自定义函数的处理类

(3).        function-signature:指定自定义函数对应的方法

<?xml version="1.0" encoding="GBK"?>
<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 
	web-jsptaglibrary_2_0.xsd" version="2.0">
	<tlib-version>1.0</tlib-version>
	<short-name>owen</short-name>
	<!-- 定义该标签库的URI -->
	<uri>http://www.linjw.taglib/tags</uri>
	<!-- 定义第一个函数 -->
	<function>
		<!-- 定义函数名:reverse -->
		<name>reverse</name>
		<!-- 定义函数的处理类 -->
		<function-class>com.linjw.function.Functions</function-class>
		<!-- 定义函数的实现方法-->
		<function-signature>
			java.lang.String reverse(java.lang.String)</function-signature>
	</function>
	<!-- 定义第二个函数: countChar -->
	<function>
		<!-- 定义函数名:countChar -->
		<name>countChar</name>
		<!-- 定义函数的处理类 -->
		<function-class>lee.Functions</function-class>
		<!-- 定义函数的实现方法-->
		<function-signature>int countChar(java.lang.String)
			</function-signature>
	</function>
</taglib>

3. JSP页面的EL中使用

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ taglib prefix="crazyit" uri="http://www.crazyit.org/tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title> new document </title>
	<meta name="website" content="http://www.linjw.org" />
</head>
<body>
	<h2>表达式语言 - 自定义函数</h2><hr/>
	请输入一个字符串:
	<form action="useFunctions.jsp" method="post">
		字符串 = <input type="text" name="name" value="${param['name']}">
		<input type="submit"  value="提交">
	</form>
	<table border="1" bgcolor="aaaadd">
		<tr>
		<td><b>表达式语言</b></td>
		<td><b>计算结果</b></td>
		<tr>
		<tr>
			<td>\${param["name"]}</td>
			<td>${param["name"]} </td>
		</tr>
		<!--  使用reverse函数-->
		<tr>
			<td>\${owen:reverse(param["name"])}</td>
			<td>${owen:reverse(param["name"])} </td>
		</tr>
		<tr>
			<td>\${owen:reverse(crazyit:reverse(param["name"]))}</td>
			<td>${owen:reverse(crazyit:reverse(param["name"]))} </td>
		</tr>
		<!-- 使用countChar函数 -->
		<tr>
			<td>\${owen:countChar(param["name"])}</td>
			<td>${owen:countChar(param["name"])} </td>
		</tr>
	</table>
</body>
</html>

4.  总结

    自定义函数的实质就是指定Java类的静态方法暴露成可以在EL中使用的函数,所以可以定义成函数的方法必须用public static修饰。






你可能感兴趣的:(java,jsp,Web应用)