posted Mar 21, 2013, 3:27 AM by Zhang Wenxu
[
updated Jul 19, 2013, 9:02 AM
]
本家:http://struts.wasureppoi.com/jsp/03_static_method.html
JSP内のEL式から、javaのstaticメソッドを呼び出すことができます。
これにより、カスタムタグを使うような感覚で手軽に、javaクラスのstaticメソッドをJSPから呼び出すことができるので、JSPの記述を非常にシンプルにすることができます。
staticメソッドを呼び出には以下の流れで、準備をします。
(1)javaのstaticメソッドを実装する。
(2)tldファイルにstaticメソッドの定義をする
(3)web.xmlにtldファイルの設定をする
(4)EL式から、staticメソッドを呼び出す。
※javaクラスのinstanceメソッドは実行できません。
●実装例
(1) javaクラスのstaticメソッドを作成(smp.CurrencyFormat.java)
・引数で受け取った数値をカンマ(,)編集します。
・数値が0以下の場合は、<font>タグを使って赤色で画面表示させます。
package smp;
import java.text.DecimalFormat;
public class CurrencyFormat {
public static String format(long curr) {
DecimalFormat formatter = new DecimalFormat("###,###,###");
String s = formatter.format(curr);
if (curr < 0) {
return "<font color=\"red\">" + s + "</font>";
}
return s;
}
}
|
(2) tldファイルを作成する(common.tld)
<?xml version="1.0" ?>
<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">
<tlib-version>2.0</tlib-version>
<function>
<name>format</name>
<function-class>smp.CurrencyFormat</function-class> ・・・ javaクラス名
<function-signature>
java.lang.String format(long) ・・・・・ staticメソッドのシグニチャ
</function-signature>
</function>
</taglib>
|
(3) web.xmlにtldファイルを定義する
<?xml version="1.0" ?>
<web-app 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-app_2_4.xsd"
version="2.4">
ーーーーーーー省略ーーーーーーーー
<jsp-config>
<taglib>
<taglib-uri>
/el/static-method ・・・ JSPのtaglibディレクティブのuri属性に
</taglib-uri> 指定される値を設定します
<taglib-location>
/WEB-INF/common.tld ・・・ tldファイルの配置場所をコンテキストルートからの
</taglib-location> 相対パスで指定します
</taglib>
</jsp-config>
</web-app>
|
(4) JSPのEL式からstaticメソッドを呼び出す
<%@ page language="java" contentType="text/html;charset=Windows-31J"%>
<%@ taglib uri="/el/static-method" prefix="common" %>
<HTML><BODY>
${common:format( 12300000 )} <br>
${common:format( -12300000 )}
</BODY></HTML>
|
※1 taglibディレクティブのuri属性には、web.xmlのtaglib-uri属性で指定した値を記述します。
※2 taglibディレクティブのprefix属性で指定した値が、javaのstaticクラスを呼び出す時に使用するプレフィックスになります。
●実行結果

|
Google+
By Zhang Wenxu |
|