タグ

ブックマーク / terazzo.hatenadiary.org (9)

  • Mayaaのソースコードで気になったところ - terazzoの日記

    まだ完全に実環境で現象が再現するところまで行ってないのでメモだけ。Mayaaのバージョンはさっき落とした1.1.26。 当はMLとかに投げるべきかもしれない。間違いがあれば指摘をお願いします。 SpecificationNodeImplのequals() org.seasar.mayaa.impl.engine.specification.SpecificationNodeImplのequals()の実装を見ると下のような感じ。 public boolean equals(Object other) { if (other instanceof SpecificationNodeImpl) { SpecificationNodeImpl otherNode = (SpecificationNodeImpl) other; return _hashCode == otherNode._ha

    Mayaaのソースコードで気になったところ - terazzoの日記
  • データの一覧をグループ毎に表示するMayaaプロセッサ - terazzoの日記

    タイトルのものを作ってみた。 背景 DBから取得した値を一覧表示するようなページで、デザイン変更があってデータをグループ毎に表示しなくてはいけなくなることが時々ある。(これの下二つのような感じ) そういう時は、アクションなどでループを回してデータを加工し、加工したデータをrequestなりアクションフォームなりにセットし、あわせてHTMLテンプレートを作成したりする。でもこれって結構面倒だ。 そこで、HTMLテンプレート上だけでグループ表示ができるようにtaglib(じゃなくてMayaaのプロセッサ)を作ってみた。 中身は、リストとグループ化の為の関数を渡してやると、その関数の戻り値に従ってリストをグループ化(同じ戻り値=同じグループ)し、タグの中身に対してグループ毎のリストを渡してグループの個数分繰り返すというもの。forEachの拡張版みたいな感じ。 ソート順が指定出来ない(出現順に表

    データの一覧をグループ毎に表示するMayaaプロセッサ - terazzoの日記
  • HTMLテンプレートの再帰でツリー型のデータを表示する - terazzoの日記

    ツリー構造を持ったデータを、Mayaaのテンプレートを再帰的にinsertすることで表示する ソース こういう階層構造のデータがあったとする package sample.model; import java.util.Arrays; import java.util.List; public class SampleUtils { /** 階層構造を持ったデータクラス */ public static class Node { public String name; // 名前 public List children; // 子要素のリスト } /** Nodeのツリー構造を初期化して戻す */ public static Node getRootNode() { return new Node() {{name="アマゾネス";children = Arrays.asList( ne

    HTMLテンプレートの再帰でツリー型のデータを表示する - terazzoの日記
  • .mayaaファイルのフォーマットを編集時にチェックする - terazzoの日記

    S2StrutsなどでMayaaを使う時にお世話になっているmayaaファイル。修正後に再起動は不要とは言え、実行しないとエラーが分からないのはとても不便だ。できればEclipse(+WTP)上で編集時にチェックしたい。 .mayaaファイルはXML形式なので、スキーマ言語での定義さえあればそれに従って書式のチェックができる(もちろん実行時のエラーを全て拾えるわけではないけど。) ありがたい事に公式サイトにxsdファイル(mayaa_core_1_0_0.xsd)が置いてあるので、それを使ってXML Schemaでチェックするようにする。 設定方法 .mayaaファイルをXMLとして認識させる。Eclipseの設定ダイアログで「General」>「Content Type」(日語なら「一般」>「コンテンツ・タイプ」)を選び、「Content types:」のツリービューから「Text」>

    .mayaaファイルのフォーマットを編集時にチェックする - terazzoの日記
  • レイアウト側の属性を制御する - terazzoの日記

    Mayaaのレイアウト共有機能では、タグ単位での置き換えは可能だけど、レイアウト側のタグの属性のみを置き換えることは普通の方法では出来ないようだ。 コンポーネントのinsertの場合とは違い、extends時にbindingで変数を渡すことができない。その代わりにpageスコープを使うことで、個別のページ側で指定した値をレイアウト側で使用する方法を考えた。 どうしてもこれが正解とは思えないんだけど、一応うまく行ったので公表。あとできるできないとか断言口調だけど、調査が足りないだけのところもあるかも…… 背景 mayaaのレイアウト共有機能を使えば、(tilesのように)ヘッダやフッタなどを共有部品をひとまとめにして共有する事が出来る。形としては、レイアウト用のページを一枚用意してその中でページ毎に切り替わる部分を指定し、個々のページではその切り替わる部分を定義する形で使用する。(Mayaa

    レイアウト側の属性を制御する - terazzoの日記
  • テンプレート切り替え機能を拡張する - terazzoの日記

    Mayaaには一つのmayaaで複数のテンプレートを切り替える機能がある。(参考: 3-10. テンプレート切り替え : Documentation - JavaServer Templates "Mayaa") たとえば利用者の使用言語に合わせてその言語用のHTMLを使う、というような用途が想定されているらしい。 使い方としては、たとえばhello.mayaaファイルのm:mayaaタグの属性にm:templateSuffix="${locale}"などと書く事で、locale="en"の時にhello$en.html、locale="ja"の時にhello$ja.htmlを表示に使用することができる。また、hello$○○.htmlが無い場合にはhello.htmlファイルが使用される。 templateSuffixで指定した種類に対応するHTMLファイルが無い場合の挙動だけど、$から

    テンプレート切り替え機能を拡張する - terazzoの日記
  • Mayaaについて思う事あれこれ - terazzoの日記

    今Mayaaを使ってスクリプトライクにアプリ開発できないか考えている。S2StrutsでもS2JSFでもなくS2とMayaaを直につないでMayaaのテンプレート上にヴァリデーションとかアクションをごりごり書くという感じ。以下、そう思うようになった発端など。 発端その1. アクションに書くことが無くなってきた 前回のプロジェクトでようやくまともにS2Dao-S2Struts-Mayaaでプログラムを書いたのだけど、無設定Strutsと自動バインドが当によく出来ていて助かった。特にActionFormをPOJOで書けるのが良い。Dto→Formのマッピングさえ用意すれば、Daoに渡すConditionとかキャッシュ用のキーとか一覧/詳細ページのハイパーリンクの記述がかなりの範囲全部同じ方式で出来る。 データアクセスとかページ送りの処理とか、とにかく共通で書ける所を全部ライブラリ化したりGe

    Mayaaについて思う事あれこれ - terazzoの日記
  • JavaScriptをサーバで動かす - terazzoの日記

    JavaScriptHTMLに組み込んでサーバ上で(PHPのように)動かせたらとても良いと思う。そして一番手っ取り早くそれを実現するのはMayaaを使う事だと思う。以下その準備とサンプル。 注意: 手っ取り早くJavaScriptを使うという目的のサンプルなので、S2StrutsなどでMayaaを使う用途としてはあんまり一般的な使い方ではないかも。 準備: Java5とTomcatとMayaaをインストール 具体的な手順は以下参照。Mac OS Xの場合は最初から入っているjavaが使える(Java5なので。) 1-2. インストールしよう : Documentation - JavaServer Templates "Mayaa" インストールと確認作業が終わるとwebappsの下にmayaaというディレクトリが出来ている。その下にJavaScript入りのHTMLファイルを置くとサー

    JavaScriptをサーバで動かす - terazzoの日記
  • Mayaaを普通のテンプレートエンジンとして使う - terazzoの日記

    解説などは後ろで。 ソースコード package sample.mayaa; import java.io.OutputStream; import java.util.Map; import javax.servlet.ServletContext; import org.seasar.mayaa.FactoryFactory; import org.seasar.mayaa.engine.Engine; import org.seasar.mayaa.impl.FactoryFactoryImpl; import org.seasar.mayaa.impl.cycle.CycleUtil; import org.seasar.mayaa.impl.cycle.web.MockHttpServletRequest; import org.seasar.mayaa.impl.cycle.w

    Mayaaを普通のテンプレートエンジンとして使う - terazzoの日記
  • 1