自定义el表达式

  在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现。鉴于此,出现了 JSTL ( JSP Standard Tag Library )。大多数 JSP 页面逻辑提供了实现的 JSTL 技术,该技术本身就是一个标签库。
  Sun 公司 Java 规范标准的 JSTL 由 apache jakarta 组织负责维护。作为开源的标准技术,它一直在不断地完善。 JSTL 的发布包有两个版本: Standard-1.0 Taglib 、 Standard-1.1 Taglib ,它们在使用时是不同的。
  EL 是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点。在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。

  sun公司提供的el表达式中,并非无所不能,就比如说里面虽然能也计算,但它不能写方法,如果我想用一个方法或者其它的什么,当自带EL表达式做不到怎么办,没关系因为el表达式可以自定义,下面就来说一下如何自定义一个el表达式.

1.需要你写一个类,这个类就是用来在jsp页面上面调用的,而且该类必须为静态的.
如:

package com.exam.jpart.tag.el;

import java.util.Map;
import java.util.Set;

/**
 * 
 * @author wind'
 * 
 * @date 2009-9-1
 * 
 * @file com.exam.jpart.tag.el/MapEL.java
 * 
 */
public class MapEL {

	/**
	 * 
	 * @param map
	 *            为一个Map对象
	 * @return Map键的集合
	 */
	@SuppressWarnings("unchecked")
	public static Set keySet(Map map) {
		if (map == null) {
			return null;
		}
		return map.keySet();
	}

	/**
	 * 
	 * @param map
	 *            为一个Map对象
	 * @param key
	 *            为一个Map对象中的key
	 * @return 返回Map中的一个对象
	 */
	@SuppressWarnings("unchecked")
	public static Object get(Map map, String key) {
		if (map == null || key == null || "".equals(key)) {
			return null;
		}
		return key;
	}

}

 

大家可以看到上面的这个类非常简单,就是实现一些简单的东西,不过到这里,我想大家又要问了,就这个就可以了吗,那我在界面上面怎么去调用这个方法,难道又要用<% %>这种小脚本吗.

回答:no.

下面我们编写一个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 web-jsptaglibrary_2_0.xsd"
	version="2.0">

	<tlibversion>1.0</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>w</shortname>
	<uri>
		http://zyongking.iteye.com/admin
	</uri>
	<info>风中叶'</info>

	<function>
		<name>keySet</name>
		<function-class>
			com.exam.jpart.tag.el.MapEL
		</function-class>
		<function-signature>
			java.util.Set keySet(java.util.Map)
		</function-signature>
		<description>获取Map中的所有键,返回一个Set集合</description>
	</function>

	<function>
		<name>get</name>
		<function-class>
			com.exam.jpart.tag.el.MapEL
		</function-class>
		<function-signature>
			java.lang.Object
			get(java.util.Map,java.lang.String)
		</function-signature>
		<description>获取Map中所对应键的值,返回一个Object对象
		</description>
	</function>

</taglib>

 就只需要编写上面的这种文件就可以了,在这里对文件不多做解释,非常简单,大家一看应该就能明白.

下面就是在界面上面调用了.

调用方式如:

<%@ taglibprefix="w"uri="/WEBINF/classes/com/exam/jpart/tag/el/w.tld" %>//这是调入文件,因为这里我只放到项目中,并没有打包,所以大家可以看到我的uri是路径,并非我在前面所写的uri,大家如果把它打包就可以写我前面所写的uri

${w:keySet(sessionScope.map)}//我的map对象存放在session中

  

你可能感兴趣的:(JavaScript,jsp,xml,脚本,sun)