ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 Hello, world その2

その1の続き。

今度は、Servletからページを返す版として、
Servletから複数レコードのデータを送信し、
View側では受け取ったデータを表形式で表示するものを作ってみる。

作るもの。

  1. Servletクラス(HelloServlet.javaと命名)
  2. Servletから遷移するJSFで作るViewページ(hello.xhtmlと命名)

○ HelloServlet.java
Servletでは、Viewページに表示するデータを作成し、
Requestを通じてViewにデータを引き渡す処理を作成する。

データの1レコードはHashMapで作成し、
それをListに詰めたものをViewに渡すものとする。

View側で表を作る際にJSFのカスタムタグを用いて実装を行うのだが、
その際、データを扱い易くするための、
ListDataModelというクラスを用いたデータも実験的に作っている。

ViewでのListとListDataModelの取り扱いは変わらないが、
ListDataModel*1はViewで使える機能が多い。

その3へ続く

package servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.RequestDispatcher;
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(name="HelloServlet", urlPatterns="/Hello")
public class HelloServlet extends HttpServlet {

    /**
     * シリアルバージョンID
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        processRequest(req, resp);
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        processRequest(req, resp);
    }
    
    protected void processRequest(
            HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Map<String, String>> dataList = new ArrayList<Map<String, String>>();
        Map<String, String> data = new HashMap<String, String>();
        data.put("type", "戦艦");
        data.put("name", "武蔵");
        dataList.add(data);
        
        data = new HashMap<String, String>();
        data.put("type", "戦艦");
        data.put("name", "大和");
        dataList.add(data);
        
        data = new HashMap<String, String>();
        data.put("type", "戦艦");
        data.put("name", "長門");
        dataList.add(data);
        
        DataModel dataModel = new ListDataModel(dataList);
        
        request.setAttribute("dataList", dataList);
        request.setAttribute("dataModel", dataModel);
        
        RequestDispatcher rd = request.getRequestDispatcher("faces/jsf/hello.xhtml");
        rd.forward(request, response);
    }
}