一、自定义EL函数
1.编写一个有公共静态方法的Java类
package foo; public class DiceRoller { //函数方法必须是公共且静态的方法 public static int rollDice(){ return (int) ((Math.random()*6)+1); } }
2.编写一个标记库文件(TLD),放到/WEB-INF目录下
<?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"> <tlib-version>1.2</tlib-version> <uri>DiceFunctions</uri> <function> <name>rollIt</name> <function-class>foo.DiceRoller</function-class> <function-signature>int rollDice()</function-signature> </function> </taglib>
3.在JSP中放一个taglib指令
<%@ taglib prefix="fn" uri="DiceFunctions" %>
4.用EL表达式调用 ${prefix:name()}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="fn" uri="DiceFunctions" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> ${fn:rollIt() } <br> </body> </html>
注意:调用方法与标签内的name值一致!
二、算数、逻辑、关系操作符
算术逻辑符 | |
加法 | + |
减法 | - |
乘法 | * |
除法 | /和div 在EL中是可以除0的,返回Infinity |
取模 | %和mod 不能对0取模,否则异常 |
逻辑操作符 | |
与(AND) | &&和and |
或(OR) | ||和Or |
非(NOT) | !和not |
关系操作符 | |
等于 | ==和eq |
不等于 | !=和ne |
小于 | <和lt |
大于 | >和gt |
小于等于 | <=和le |
大于等于 | >=和ge |
EL可以很好的处理Null值:
unknown或NULL,即便找不到指定属性/性质/键,也会显示页面
在算术表达式中,EL把Null值看做是 0
在逻辑表达式中,EL把null看做是 false