すぐに始める Struts2 (Mayaa編)
Eclipseを入れて、Subversionからソースをチェックアウトして、アプリケーションサーバを Runして、動作を見ながら JSPを書き換えてくれる HTMLライターさんなんて数えるほどしかいないのだよ、世の中には!
というわけで Struts2の画面表示をするにあたって JSPのかわりに Mayaa を使う方法を調べた。
Mayaaを私の理解している範囲で簡単に説明すると、IEや Firefoxでそのまま表示できてしまうようなごく普通の HTMLファイルが不思議と動的なページの表示に使えてしまうテンプレートエンジン(動的要素の定義はHTMLファイルの隣に mayaaファイルとして配置する)ということらしい。これだと HTMLライターとプログラマの協業が殴り合いも発生せずスムーズにいく(かもしれない)というわけ。
とはいえ Mayaaについてそれほど深く知らないので、ここではStruts2との統合についてだけ取り扱う。実際に思惑通りの使い方が出来るかどうかはこれから試してみる。
Struts2 Mayaa Plugun
このプラグインのサンプルには当然 struts.xmlでの設定方法が含まれているが、このブログでは struts.xmlなしでどこまで行けるかチャレンジすることになっているので(そうなの?)アノテーションだけで Mayaaを呼び出すことにした。
WEB-INF/lib に追加で入れたものは下記の通り。
commons-beanutils-core-1.7.0.jar
commons-collections-3.1.jar
jaxen-1.1.jar
js-1.6R5.jar
mayaa-1.1.10.jar
nekohtml-0.9.5.jar
struts2-mayaa-plugin-1.0.0.jar
xercesImpl-2.7.1.jar
web.xmlには下記の設定を追加。
MayaaServletを呼び出すことは無いのだが、load-on-startupでこれを自動ロードしておかないといくつかの内部コンポーネントが初期化されないという問題があるため設定を追加する必要がある。この servletに対する servlet-mappingは不要。
アクションクラスに対する Resultアノテーションは下記のようになる。Resultの typeが MayaaResult.classになり、valueが HTMLファイルを指す。
@Results({
@Result(name="success",type=MayaaResult.class,value="success.html"),
})
上記の例ではアクションが successを返したときに success.htmlと success.mayaa が処理される形になる。
HTMLファイルとmayaaファイルを表側から直接見られないように WEB-INFの下へ配置してみたところ、org.seasar.mayaa.impl.source.ForbiddenPathException: Access Forbidden to /WEB-INF/.... などと言われて読み込めなかった。これは何か設定で回避できるのかもしれないがまだ調べていない。というかGoogle Code Searchで Mayaaのソースが見つからなかった。(追記:WEB-INF/page 以下に HTMLファイルを置けることが判明、このパスは自動的に検索されるので、例えばWEB-INF/page/hoge.htmlを使用したい場合単に hoge.htmlと指定すれば良い )
というわけで Struts2の画面表示をするにあたって JSPのかわりに Mayaa を使う方法を調べた。
Mayaaを私の理解している範囲で簡単に説明すると、IEや Firefoxでそのまま表示できてしまうようなごく普通の HTMLファイルが不思議と動的なページの表示に使えてしまうテンプレートエンジン(動的要素の定義はHTMLファイルの隣に mayaaファイルとして配置する)ということらしい。これだと HTMLライターとプログラマの協業が殴り合いも発生せずスムーズにいく(かもしれない)というわけ。
とはいえ Mayaaについてそれほど深く知らないので、ここではStruts2との統合についてだけ取り扱う。実際に思惑通りの使い方が出来るかどうかはこれから試してみる。
Struts2 Mayaa Plugun
このプラグインのサンプルには当然 struts.xmlでの設定方法が含まれているが、このブログでは struts.xmlなしでどこまで行けるかチャレンジすることになっているので(そうなの?)アノテーションだけで Mayaaを呼び出すことにした。
WEB-INF/lib に追加で入れたものは下記の通り。
commons-beanutils-core-1.7.0.jar
commons-collections-3.1.jar
jaxen-1.1.jar
js-1.6R5.jar
mayaa-1.1.10.jar
nekohtml-0.9.5.jar
struts2-mayaa-plugin-1.0.0.jar
xercesImpl-2.7.1.jar
web.xmlには下記の設定を追加。
<servlet>
<servlet-name>MayaaServlet</servlet-name>
<servlet-class>org.seasar.mayaa.impl.MayaaServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
MayaaServletを呼び出すことは無いのだが、load-on-startupでこれを自動ロードしておかないといくつかの内部コンポーネントが初期化されないという問題があるため設定を追加する必要がある。この servletに対する servlet-mappingは不要。
アクションクラスに対する Resultアノテーションは下記のようになる。Resultの typeが MayaaResult.classになり、valueが HTMLファイルを指す。
@Results({
@Result(name="success",type=MayaaResult.class,value="success.html"),
})
上記の例ではアクションが successを返したときに success.htmlと success.mayaa が処理される形になる。
HTMLファイルとmayaaファイルを表側から直接見られないように WEB-INFの下へ配置してみたところ、org.seasar.mayaa.impl.source.ForbiddenPathException: Access Forbidden to /WEB-INF/.... などと言われて読み込めなかった。これは何か設定で回避できるのかもしれないがまだ調べていない。というかGoogle Code Searchで Mayaaのソースが見つからなかった。(追記:WEB-INF/page 以下に HTMLファイルを置けることが判明、このパスは自動的に検索されるので、例えばWEB-INF/page/hoge.htmlを使用したい場合単に hoge.htmlと指定すれば良い )
ラベル: Struts2


