初めてのSAStrutsのネタを書きます。。。
SAStrutsとMayaaと組みわせはできると耳にしていたのですが、具体的な方法がよくわからなかったので調べてみました。
web.xmlにMayaaServletの設定を追加する。
<servlet> <servlet-name>MayaaServlet</servlet-name> <servlet-class>org.seasar.mayaa.impl.MayaaServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MayaaServlet</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>
<context-param> <param-name>sastruts.VIEW_PREFIX</param-name> <param-value>/WEB-INF/view</param-value> </context-param>
は、そのままにしておきます。
SAStrutsのサンプルにあるAddActionの遷移先をxxx.jspではなくxxx.htmlに変える。
@Execute(validator = false) public String index() { return "index.html"; } @Execute(input = "index.html") public String submit() { result = Integer.valueOf(arg1) + Integer.valueOf(arg2); return "index.html"; }
xxx.jspが配置されているディレクトリにhtml,mayaaファイルを置く。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <span id="allMessages"/> <form method="post"> <input type="text" id="arg1" name="arg1"/> + <input type="text" id="arg2" name="arg2"/> = <span id="result"/> <input type="submit" name="submit" value="calc"/> </form> </body> </html>
formタグのaction属性はadd/になるようにわざと指定していません。各inputタグのname属性でSAStrutsとPOST時に連携できるようにし、id属性はMayaaでレスポンス時に連携できるようにします。これでURLを崩さないで実行できます。Mayaaでnamae属性を動的に追加するようにしてもよいかもしれません。
あ,そうそう.
<input type="submit" name="submit" value="calc"/>
submitメソッドは,name="submit"がないといけないようです.
<?xml version="1.0" encoding="ISO-8859-1"?> <m:mayaa xmlns:m="http://mayaa.seasar.org" xmlns:html="http://struts.apache.org/tags-html"> <m:with m:id="allMessages"> <html:errors/> </m:with> <m:echo m:id="arg1"> <m:attribute name="value" value="${addAction.arg1}" /> </m:echo> <m:echo m:id="arg2"> <m:attribute name="value" value="${addAction.arg2}" /> </m:echo> <m:write m:id="result" value="${addAction.result}" replace="false"/> </m:mayaa>
arg1,arg2の値のバインディングですが、${addAction.xxx}で指定しています。addActionFormでもよいと思います。
Strutsタグを使うようなところは、Mayaaのカスタムタグを呼び出す仕組みをそのまま使います。allMessagesとか。
で、今までどおり、http://localhost:8080/xxx/add/ とかでアクセスしてください。Mayaaも一緒に動くはずですw
まとめ
Mayaaのテンプレート機能は強力ですね!慣れればいろいろ複雑な要件もさっくり実現できそう。。。でも、Teedaと比べると脳内変換がとても大変。
SAStrutsでは通常JSPを使うはずですが、JSP2.0でEL式だけでテンプレートかけるとよいですが、そんなことできるのかしら。
最初にTeedaのHTMLテンプレートに慣れてしまったので、どちらにしても戸惑いますなぁ。。。TeedaのHTMLテンプレート機能をSAStrutsでも使ってみたいなぁーと思ったり。
まぁ、いずれにしてもMayaaはデザイナーとの連携を考えてもありありなので、ぜひ使ってみよう。
以上、簡単ですが、組み合わせ方でした。