Strutsリファレンス(逆引き)

Strutsリファレンス
 
Web struts.wasureppoi.com
メニューを動的に作成する(org.apache.struts.tiles.Controller)
スポンサード リンク

動的にメニューを定義するには、インタフェース「org.apache.struts.tiles.Controller」を実装してコントローラを作成します。

このコントローラは、アクションクラス実行後に実行され、その後でJSPの処理へ移ります。

tiles-def.xml 定義

<definition name="MENU_LAYOUT_02"
          path="/jsp/tiles_jsp/sample_menu.jsp"
          controllerClass="sample.tiles.DynaMenuController">
</definition>


controllerClass属性で作成したコントローラクラスを指定します。

コントローラクラスの実装

package sample.tiles;

import org.apache.struts.tiles.Controller;
import org.apache.struts.tiles.ComponentContext;
import org.apache.struts.tiles.beans.SimpleMenuItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;
import java.util.List;
import java.util.ArrayList;

public class DynaMenuController implements Controller{

   public void execute(ComponentContext context,
                HttpServletRequest request,
                HttpServletResponse response,
                 ServletContext servletContext){

    // メニューリストを作成する
    List<SimpleMenuItem> menuList=new ArrayList<SimpleMenuItem>();

    SimpleMenuItem menu = new SimpleMenuItem();
    menu.setValue("メニュー1");
    menu.setLink("/jsp/tiles_jsp/menu_link_01.jsp");
    menuList.add(menu);

    menu = new SimpleMenuItem();
    menu.setValue("メニュー2");
    menu.setLink("/jsp/tiles_jsp/menu_link_02.jsp");
    menuList.add(menu);

    menu = new SimpleMenuItem();
    menu.setValue("メニュー3");
    menu.setLink("/jsp/tiles_jsp/menu_link_03.jsp");
    menuList.add(menu);

    // メニューリストを登録する
    context.putAttribute("menuList", menuList);
  }

   public void perform(ComponentContext context,
                HttpServletRequest request,
               HttpServletResponse response,
                ServletContext servletContext){
   }
}

performメソッドはjavadoc上では、1.2以降は非推奨となってますが、実装しないとコンパイルエラーになったので、とりあえず実装しています。実際の処理は、executeメソッドに実装します。
executeメソッドの第一引数の「ComponentContext」には、tiles-def.xmlの<difinition>タグ内の<putList>や<put>タグを使った定義と同じ指定が可能です。


スポンサード リンク


上記の実装内容は、下記のdefinitionの定義内容と同じになります。

<definition name="MENU_LAYOUT_01" path="/jsp/tiles_jsp/sample_menu.jsp" >
  <putList name="menuList" >
      <item value="メニュー1"
          link="/jsp/tiles_jsp/menu_link_01.jsp"
          classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />
      <item value="メニュー2"
          link="/jsp/tiles_jsp/menu_link_02.jsp"
          classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />
      <item value="メニュー3"
          link="/jsp/tiles_jsp/menu_link_03.jsp"
          classtype="org.apache.struts.tiles.beans.SimpleMenuItem" />
  </putList>
</definition>



画面イメージ&HTMLソース



<html><body>

<a href="/Struts1.2/jsp/tiles_jsp/menu_link_01.jsp">メニュー1<br></a>

<a href="/Struts1.2/jsp/tiles_jsp/menu_link_02.jsp">メニュー2<br></a>

<a href="/Struts1.2/jsp/tiles_jsp/menu_link_03.jsp">メニュー3<br></a>

</body></html>



スポンサード リンク


tiles概要
シンプルな画面定義をしてみる<definitions>
画面レイアウトを定義する<definition、put>
画面定義を継承する<definitions extends >
メニュを作成する<tiles:putList>
メニューを動的に作成する(org.apache.struts.tiles.Controller)

カスタムタグへ
忘れっぽいエンジニアのJakarta Strutsリファレンス TOPへ