Struts2に触れよう! その3(showcase#Person Managerサンプル編)

他のサンプルも見てみようということで、いろんなサンプルがごっちゃになってるshowcaseを見てみることに。

HelloWorldのときと同じように、eclipse上でTomcatプロジェクトをプロジェクト名example02で新規作成し、
struts-2.0.6/apps/struts2-showcase-2.0.6.war
を解凍して、まるっとインポート。
ビルドパスの構成で、/WEB-INF/lib/配下のjarをライブラリに追加し、ソースフォルダを/WEB-INF/src/javaに変更。

Tomcatを起動し、
http://localhost:8080/example02/showcase.action
でいろんなタブのある画面がでればおk。

今回はSpringとの連携のサンプルってことで、Person Managerを見ることに。とりあえず、Person Managerのタブをクリックし、Listのリンクで人の名前の一覧が表示されるところを確認。

今回使われてるのは以下のもの。

WEB-INF/web.xml
WEB-INF/applicationContext.xml
WEB-INF/classes/struts.xml
WEB-INF/classes/struts-person.xml
WEB-INF/classes/org.apache.struts2.showcase.person.ListPeopleAction.class
WEB-INF/classes/org.apache.struts2.showcase.person.Person.class
WEB-INF/classes/org.apache.struts2.showcase.person.PersonManager.class
person/listPeople.ftl

[web.xml]

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

Springと連携させるのに、struts2-spring-plugin.jarが必要で、web.xmlに上記のようにリスナーを登録すれば使えるようになるっぽい。


[applicationContext.xml]

   <bean id="personManager" class="org.apache.struts2.showcase.person.PersonManager" singleton="true"/>

これはSpring側の設定。PersonManagerのインスタンスをSpringが自動生成させるためのもの。


[org.apache.struts2.showcase.person.ListPeopleAction.java]

com.opensymphony.xwork2.ActionSupport
△
|
org.apache.struts2.showcase.person.ListPeopleAction

リクエストの受け口で、継承関係はこんな感じ。

    public void setPersonManager(PersonManager personManager) {
        this.personManager = personManager;
    }

    public String execute() {
        people.addAll(personManager.getPeople());

        return SUCCESS;
    }

    public List getPeople() {
        return people;
    }

    public int getPeopleCount() {
        return people.size();
    }

setPersonManager()を用意しておくことで、Springが勝手にPersonManagerのインスタンスを作ってセットしてくれるので、あとは、execute()が実行されたときに、PersonManagerからPersonの一覧を取り出してるだけ。


[org.apache.struts2.showcase.person.PersonManager.java]

    private static Set people = new HashSet(5);
    private static long COUNT = 5;

    static {
        // create some imaginary persons
        Person p1 = new Person(new Long(1), "Patrick", "Lightbuddie");
        Person p2 = new Person(new Long(2), "Jason", "Carrora");
        Person p3 = new Person(new Long(3), "Alexandru", "Papesco");
        Person p4 = new Person(new Long(4), "Jay", "Boss");
        Person p5 = new Person(new Long(5), "Rainer", "Hermanos");
        people.add(p1);
        people.add(p2);
        people.add(p3);
        people.add(p4);
        people.add(p5);
    }

    public Set getPeople() {
        return people;
    }

PersonManagerはPersonの一覧を作ってるだけ。


[org.apache.struts2.showcase.person.Person]

setter/getterを持ってるだけなので省略。


Spring便利だねー。これで、データソースの取得部分とかをDIに任せたりとか応用すればよいわけね。


[person/listPeople.ftl]

で、あとは画面に表示させるだけっと。
ちなみに、ftlってなんじゃいって思って調べたら。FreeMarkerってテンプレートエンジンを採用してるのね。Velocityと同じようなもんか。学習コストとかを考えるとJSPでいいじゃんって思うので、ここはスルー。