コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

JSPとELを見直そう No. 3 ELで任意のメソッドの呼び出し

Java EE 6からELで任意のメソッドが呼び出せるようになりました。それまではgetterを使えば擬似的にメソッド呼び出しのようなことはできましたが、引数も渡すことができない上、本来の使い道ではありませんでした。

Java EE 6では引数付きも含めてELからメソッドを呼び出すことができます。

具体的に見ていきます。

最初に呼び出すメソッドを含めたBookクラスを次のように作成します。

package com.example;

public class Book {
    private String name;
    private Integer price;

    public String renderHtml() {
        StringBuilder sb = new StringBuilder();
        sb.append("<table border=\"1\">");
        sb.append("<tr><td>").append(name).append("</td>");
        sb.append("<td>").append(price).append("</td></tr>");
        sb.append("</table>");
        return sb.toString();
    }

    public int calcPrice(int num) {
        return price * num;
    }

    public Book(String name, Integer price) {
        this.name = name;
        this.price = price;
    }
}

今回はサーブレットを用意し、用意したBookクラスのインスタンスをrequestスコープにセットします。

package com.example;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/s03")
public class S03Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        Book book = new Book("よくわかるJSP", 2800);
        request.setAttribute("book", book);
        request.getRequestDispatcher("/03.jsp").forward(request, response);
    }

}

最後にJSPです。requestスコープに格納したインスタンスメソッドを呼び出しています。

<%@page import="java.util.Map" %>
<%@page import="java.util.List" %>
<%@page contentType="text/html; charset=utf-8" %><%--
--%><!DOCTYPE html>
<html lang="ja">
 <head>
  <meta charset="utf-8">
  <title>JSP</title>
 </head>
 <body>
${book.renderHtml()}<br>
3冊買うと${book.calcPrice(3)}円
 </body>
</html>

ソースは https://github.com/kuwalab/JSP にあります。

まとめ http://kuwalab.hatenablog.jp/entry/JSP
最初 http://kuwalab.hatenablog.jp/entry/JSP/01
前回 http://kuwalab.hatenablog.jp/entry/JSP/02
次回 http://kuwalab.hatenablog.jp/entry/JSP/04