[mayaa-user:797] Re: テンプレートをファイル以外で持つ方法について

suga [E-MAIL ADDRESS DELETED]
2009年 6月 2日 (火) 11:58:35 JST


suga です。

2009/6/1 : p <[E-MAIL ADDRESS DELETED]>:
> 環境:oracle+s2jdbc+sastruts+mayaaで開発しております。
>
> Mayaaのテンプレートファイル(html)をDBから取得し、ファイルとして書き出さずに、SAStrutsのFormオブジェトの
> とあるプロパティに設定したhtmlソースを.mayaaファイルとバインディングさせたいと考え、調べています。
> がよい方法が見つけられません。
>
> 何か解決策又はヒントはありませんでしょうか?

classes/META-INF/org.seasar.mayaa.source.PageSourceFactory
という XML ファイルを置いて、Mayaa がソースを探すパスを
カスタマイズすれば可能です。

オリジナルは src-impl/org/seasar/mayaa/impl/factory/ の下にあります。

<factory class="org.seasar.mayaa.impl.source.PageSourceFactoryImpl"
	serviceClass="org.seasar.mayaa.impl.source.PageSourceDescriptor">
	<parameter name="folder" value="/WEB-INF/page"/>
</factory>

この serviceClass として指定されているクラスを独自のものに置き換える
という形になるでしょう。
ソースの systemID とはコンテキストルートからの /foo/bar.html のような
パスです。拡張子が .html なら独自で探し、そうでなければデフォルトに
任せるような実装をする形でしょうか。

独自SourceDescriptorとデフォルトとの場合分けをするところは、
PageSourceFactoryImpl も置き換える方がスマートかもしれません。


注意点としては、getTimestamp() で再ビルドが必要かどうかのチェックを
するため、適切にタイムスタンプを返す必要があることです。
タイムスタンプチェックを無効にしているなら話は別ですけど。

-- 
suga ( [E-MAIL ADDRESS DELETED] )


mayaa-user メーリングリストの案内