JSP2.0より導入された、EL式(Expression Language)で、
[Functions]という機能を用いて静的な関数を呼びだすことができます。
何度も実行する文字列操作や処理を、関数にまとめておくことで、
開発効率を上げることができます。
ここでは、長い文字列を指定した桁数で省略し末尾に[ ...]を付加して表示する例を用いて説明します。
手順としては、以下の2つです。
・関数の作成
・TLDファイルの作成
関数の作成
作成する関数は、必ず[public static]である必要があります。
パッケージ名[sample.jsp], ファイル名:[JSPFunctions.java]
/** * 表示文字数を制限する * 指定桁を超える場合は、指定桁で表示文字列を制限し末尾に"..."を付加する。 * @param str 表示対象文字列 * @param size 表示桁 * @return 表示文字列 */ public static String omitString(String str, Integer size){ return str.length() <= size ? str : str.substring(0, size) + " ..."; }
TLDファイルの作成
function要素をタグ定義ファイル設定します。
<?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.0</tlib-version> <function> <name>omitString</name> <function-class>sample.jsp.JSPFunctions</function-class> <function-signature>java.lang.String omitString(java.lang.String, java.lang.Integer)</function-signature> </function> </taglib>
- tlib-version:タグライブラリのバージョン(内部のみの使用であれば1.0で問題ない)
- function
- name:EL関数の名前
- function-class:定義されているクラスの完全修飾名
- function-signature:EL関数のシグネチャ(クラスは完全修飾名で記述すること)
上記には、最低限の設定を記述したが、
細かい仕様については以下のサイトが参考になります。
The Java Community Process(SM) Program - communityprocess - final
[Java]JavaEE - JSP - tldファイル【PGBox】
使用方法
JSPにて利用する場合には、以下の様に記述します。
<%@taglib prefix="sample" uri="/WEB-INF/sample.tld" %> ${sample:omitString("ABCDEF", 3)}
この結果は、[ABC ...]と表示されます。
まとめ
要は、static関数をJSPで利用できるということです。
スクリプトレットで同様に書くならば、
<%@page import="sample.jsp.JSPFunctions"%> <% out.print(JSPFunctions.omitString("ABCDEF", 3)) %>
と同様です。
それほど特別な処理ではありません。
使い所としては、ビジネスロジックにて取得したリストの内容を成型する場合に、
ビジネスロジック内でループさせ成型するよりも、JSP上で一覧表示するなどの際に、
成型した方が、手間が1回で済むといったところでしょうか。
なんでもかんでも、Functionsにするのではなく、
使い所を考えて利用する方が良いですね (・ω・)ノシ