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