當想做的並不只是存取屬性與特性值,EL函式則可以做到功能性上的處理
當然,在JavaBean的 getter 與 setter 裡對想取得的值以程式來作處理沒有問題
只是將程式的邏輯分層等等考量,我們需要能做功能處理的函式
除此之外,本篇也會將EL剩下的東西記錄完
EL函式有一定的撰寫規則
1.撰寫的Java類別需要有公開的靜態(static)方法,而且可以接受參數
雖然沒有強制規定,但回傳型態不應該是 void
2.撰寫標籤程式庫描述子(Tag Library Descriptor, TLD)
TLD提供了定義函式的Java類別與呼叫函式的JSP之間的對映
格式使用XML,應用上類似DD,但副檔名須改成 .tld
檔案存放地點必須放在/WEB-INF目錄或其子目錄底下,container會幫我們讀取其內容
3.JSP中需加上taglib指令
定義namespace,可以在一個JSP裡使用多個TLD的函式
4.用EL來呼叫函式
首先提供這次的程式碼:
func.java=========
package tw.vencs;
public class func {
public static int random(){
return (int)(Math.random()*100);
}
}
tldTest.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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.2</tlib-version> <!-- 宣告標籤版本 -->
<short-name>randFunction</short-name>
<uri>randFunction</uri>
<function>
<name>getRand</name>
<function-class>tw.vencs.func</function-class>
<function-signature> int random() </function-signature>
</function>
</taglib>
show.jsp======
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="test" uri="randFunction" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>test</title>
</head>
<body>
${test:getRand()}
</body>
</html>
這支程式會在show.jsp裡提供一個隨機產生的數字
Java程式檔案提供了靜態的亂數方法
tld 檔案裡的 uri 元素提供了讓container辨識的功能,而不是指位置
使用EL函式須在 taglib 指令中填上要引用的函式的 uri,範例中JSP與 tld 都填上相同的 uri
<short-name>是給予IDE等開發工具辨識用的依據
這邊我們給它跟 uri 相同的名稱
<function>裡的<name>提供了給予外界呼叫函式用的名稱
JSP中的${test:getRand()}這行,getRand()就會對照 tld 檔,依其名稱使用指定的函式
<function-class>會指定該函式使用的類別
<function-signature>在所指定的類別中選擇被使用的靜態方法,型別也需要寫清楚
JSP的 taglib 宣告將引用的標籤檔案( uri 所指的 tld 檔 )以prefix命名為在此頁面使用的別名
所以${test:getRand()}就是呼叫test這個別名所指的 tld 檔裡的 getRand Function
通常我們使用EL就用到上述功能
雖然不應該在EL中進行運算或邏輯處理
但假使有一些小型的功能需求時,直接在EL中處理掉也是方便的選擇
接著來看看EL的運算子
算術運算子:
加 -> + , 減 -> - , 乘 -> * , 除 -> / or div , 求餘數 -> % or mod
邏輯運算子:
AND -> && or and , OR -> || or or , NOT -> ! or not
關係運算子:
相等 -> == or eq , 不相等 -> != or ne , 小於 -> < or lt , 大於 -> > or gt
小於或等於 -> <= or le , 大於或等於 -> >= or ge
EL裡將數字除以0得到的結果是 INFINITY ,而不是錯誤
而求餘數則不能拿0來求餘數,否則會發生例外
EL在設計上在處理 null 值時,會顯示空白而不會丟出例外
最後再提一個頁面轉向的標準動作
程式碼範例:<jsp:forward page="destination.jsp" />
使用注意事項就像其他的轉向功能一樣,轉交前不能輸出資料
這樣EL的部分就結束了
沒有留言:
張貼留言