投稿‎ > ‎

JSP内のEL式から、javaのstaticメソッドを呼び出す

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
Comments