読者です 読者をやめる 読者になる 読者になる

JSPで、EL式のFunctions機能を使って、オリジナル関数を作成する。

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にするのではなく、
使い所を考えて利用する方が良いですね (・ω・)ノシ