SpringフレームワークではWebフレームワークとして独自のSpringMVCが
ありますが、WebフレームワークのデファクトスタンダードのStrutsもサポート
しています。

Strutsの次のスタンダードとしてJSFやStruts2があげられるなど、Web
フレームワークでもJ2EEは今、変動期にあるといってもいいのではない
でしょうか?

ですが既存ソフト資産や安定性、技術情報量の多さもあってStrutsは
まだまだ使い続けられるでしょう。

書籍の一覧検索をSpring + Strutsに移植してみましょう。

ポイントはActionSupportクラスです。


ではコードいってみよう!



package
action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import org.springframework.context.ApplicationContext;
import org.springframework.web.struts.ActionSupport;

import model.BookCatalog;
import action.form.BookCatalogForm;

public
class BookCatalogAction extends ActionSupport{

public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
throws Exception {

    BookCatalogForm bookCatalogForm = (BookCatalogForm)form;

    // AppricationContex取得
    ApplicationContext applicationContext = getWebApplicationContext();

    BookCatalog bookCatalog = (BookCatalog)applicationContext.getBean('bookCatalog');

   // 書籍一覧情報の取得
    List bookList = bookCatalog.getBookList('1234567890') ;

   // ActionFormクラスにデータを設定する。 
  bookCatalogForm.setBookList(bookList);

    return mapping.findForward('success');

    }

}

このクラスがStrutsの場合のActionクラスに相当します。executeメソッドのシグニチャ
も全く同じです。

BookCatalogFormkクラスはStrutsのActionFormです。


前回記事でapplicationContextを切り分けたので、getWebApplicationContext()関数
でApplicationContext を生成し、DIコンテナからbookCatalogクラスを取得しています。

bookCatalog型(インターフェース)変数にはbookCatalogImplクラスのインスタンスが
入ります。この辺はSpringMVCでの場合と同じです。

※実装型に直接代入するのではなく、インターフェースに代入します。


SpringMVCの場合と異なるのはBookCatalogFormkクラス(ActionFormクラス)を
利用してJSPにデータを渡す部分です。

※BookCatalogFormkクラスはgetBookList()関数の結果のListを格納するために
使用するList型変数のセッタ/ゲッタのみを定義したActionFormクラスです。


こうすることでJSPにてBookCatalogFormkクラスのインスタンスからisbn番号とタイトルを
取得することが出来ます。


一覧結果を出力するJSP
------------------------------------------------------------------------



<html:html>
<
head>
<
title>書籍一覧(strutsバージョン)title>
head>
<
body>
<
div align='center' class='body'>
<
h2>書籍一覧h2>
<
table border='1'>
<
tr class='header'>
<
th align='center' width='80'>iabn番号th>
<
th align='center' width='320'>タイトルth>
tr>
<
logic:iterate id='item' name='bookCatalogForm' property='bookList'>
<
tr class='record'>
<
td align='center'>
<
bean:write name='item' property='isbn' />
td>
<
td align='left'>
<
bean:write name='item' property='title' />
td>
tr>
logic:iterate>
table>
div>
body>
html:html>
------------------------------------------------------------------------

Strutsカスタムタグを使っていますが、JSTLの場合とほぼ同じです。

※Eclipseプロジェクトのファイル構成は専用HPに掲載してあります。