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でいいじゃんって思うので、ここはスルー。