在 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中