21.2. org.apache.struts.tiles.actions.TilesAction
Controllerを作成する2つ目の方法について説明します。2つ目の方法は、「org.apache.struts.tiles.actions.TilesAction」を利用する方法です。TilesActionは「org.apache.struts.action.Action」クラスを継承したクラスで、これによってActionクラスを作成する事ができます。開発者はまずTilesActionを継承したActionクラスを実装し、それを他のActionクラスと同じように、特定のURLで呼び出されるようにします。そしてTiles設定ファイルの関連付ける組み合わせで、作成したActionが動作するURLを指定します。Controllerの場合と同じように、Actionクラスが実行された直後、JSPページが表示される前にTilesActionを継承したActionクラスが実行されます。
例として、前節と同じ動作をするActionクラスを作成します。
package sample;
import org.apache.struts.tiles.actions.TilesAction;
import org.apache.struts.tiles.ComponentContext;
import org.apache.struts.tiles.beans.SimpleMenuItem;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.ArrayList;
public class MenuTilesAction extends TilesAction{
public ActionForward execute(ComponentContext context, ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response)
throws Exception{
// リストの作成
List menuList=new ArrayList();
SimpleMenuItem menu=new SimpleMenuItem();
menu.setLink("/WEB-INF/jsp/calendar.jsp");
menu.setValue("カレンダー");
menuList.add(menu);
menu=new SimpleMenuItem();
menu.setLink("/WEB-INF/jsp/clock.jsp");
menu.setValue("世界時計");
menuList.add(menu);
// リストの登録
context.putAttribute("menuList", menuList);
return(null);
}
}
TilesActionで定義されているメソッドは幾つかありますが、ここで実装しなければならないものは、ComponentContextを引数にとるexecuteメソッドです。以下に定義を示します。
public ActionForward execute(ComponentContext context, ActionMapping, mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response)
throws Exception
引数の種類が変わっていますが、Controllerのperformと同じように使用できると考えて下さい。またActionForwardを返さなければなりませんが、nullを返すようにして下さい。nullを返さなかったとしてもその値は無視されます。サンプルのプログラムは、最後にnullを返していることを除けば、前節のControllerのサンプルと全く同じです。
最後にTiles設定ファイルでの、設定方法について説明します。TilesActionを関連付けるためには、関連付ける組み合わせに「controllerUrl」属性を定義します。先ほど作成したTilesActionが「/tilesAction.do」というURLにマッピングされているとすると、以下のようになります。
<definition name="tilesAction" path="/WEB-INF/jsp/layout.jsp"
controllerUrl="/tilesAction.do">
...
</definition>
(実習課題2)
実習課題1と同じ挙動をするWebアプリケーションを、TilesActionを用いて作成しなさい。

