[mayaa-user:637] Re: [mayaa]複数のmayaaファイルをデフォルトにしたい
Yasuhiro Oguro
[E-MAIL ADDRESS DELETED]
2008年 2月 21日 (木) 10:48:22 JST
お疲れ様です。小黒です。
うーん・・・。ソースを読み込み中に脳がハングアップしてしまいました。
低脳ですみません。脳トレで40歳です。
http://mayaa.seasar.org/documentation/slide/SC2006Autumn_B1_Mayaa.pdf
の39ページを参考にしてみると、
> /aaa/index.mayaa に m:templateSuffix="/foo/bar/index" としておくと、
> テンプレートは
> /aaa/index$/foo/bar/index.html
> になります。
ということは
/aaa/index.htmlと/aaa/index$/foo/bar/index.htmlというファイルに/aaa/index.mayaaが適用されるということですね。
で、エンジンを拡張すると、/aaa/index.mayaaが
> /foo/bar/index.html
に適用されるようになると。
で、最初の要件に戻ると、
> リクエルト 読込HTML 適用mayaaファイル
> ------------------------------------------------------------
> Aアクション/aaa/bbb/ aaa/bbb.html A.mayaa
/aaa/bbb.htmlに/A.mayaaを適用するには、エンジン拡張後
/A.mayaaにm:templateSuffix="/aaa/bbb.html"
と書くわけでしょうか?
となると、ユーザがhtmlファイルをアップしたトリガーを拾って、
mayaaファイルを書き換える?という意味でしょうか。
でも実際に運用してみると、結局htmlファイル個別にmayaaを作る羽目になる可能性が高い気がします・・・ユーザはわがまま言いますからねorz
以上 宜しくお願いします。
---
NEEC System Technology Co.,Ltd.
Y.Oguro <[E-MAIL ADDRESS DELETED]> ☆.。.:*・°
On Thu, 21 Feb 2008 09:38:57 +0900
suga <[E-MAIL ADDRESS DELETED]> wrote:
> suga です。
>
> 2008/2/20 <[E-MAIL ADDRESS DELETED]>:
> > ユーザ要件の部分を詳しく書きますと、イメージはASPサービスのイメージ
> > です。なので、Aアクション/aaa/bbb/の部分は、{顧客ID}/{テンプレートID}
> > になります。
> > Aアクション/{顧客ID}/{テンプレートID}ディレクトリに対して、ページ製作者が
> > 自由にファイルをアップし、お客さん毎に動的に画面のデザインを切り替えると
> > いうのがやりたいことです。
> > 〜テンプレートは顧客毎に複数用意できるので、2階層のディレクトリになって
> > います。
>
> なるほど、理解しました。
>
> だとすると簡単な方法は、templateSuffix にパスを入れてしまうことかもしれません。
>
> /aaa/index.mayaa に m:templateSuffix="/foo/bar/index" としておくと、
> テンプレートは
> /aaa/index$/foo/bar/index.html
> になります。
>
> エンジン設定で suffix セパレータを変更しておけば、$ を別のものにすることも
> できます。
> http://mayaa.seasar.org/documentation/engine_settings.html
>
>
>
> > >> どうしても別のディレクトリのもので同じ Mayaa を使いたいという
> > >> 場合、独自の実装を作ってエンジン設定で実装クラスを入れ替える
> > >> しかありません。
> >
> > すみません。これをやろうとすると、どのあたりをいじることになりますか。
> > 既存のソースをいじることなく、「エンジン設定で実装クラスを入れ替える」
> > ことは可能なものですか。
>
> こちらだともっと自由度は上がりますが、やることは複雑になります。
> 基本的には上で述べた方法のうち、元のページ名である "index" も含めて
> 変更できるようになります。
>
> たとえばこんなクラスを作ります。
> Mayaa 標準の Engien 実装を継承して、テンプレートファイルのパスを
> suffix 含めて組み立てる部分のみ変更します。
>
> --------------------------
> package example;
>
> import org.seasar.mayaa.engine.Page;
> import org.seasar.mayaa.impl.engine.EngineImpl;
> import org.seasar.mayaa.impl.util.StringUtil;
>
> public class TemplateNameSampleEngineImpl extends EngineImpl {
>
> public String getTemplateID(Page page, String suffix, String extension) {
> // name : /foo/bar | /foo/bar.mayaa に対応
> String pageName = page.getPageName();
> StringBuffer name = new StringBuffer(pageName.length());
> if (StringUtil.hasValue(suffix)) {
> // 本来は /foo/bar$suffix のところを /foo/suffix/bar にする
> int lastIndex = pageName.lastIndexOf('/');
> name.append(pageName.substring(0, lastIndex));
> name.append('/');
> name.append(suffix);
> name.append(pageName.substring(lastIndex));
> } else {
> name.append(pageName);
> }
> if (StringUtil.hasValue(extension)) {
> name.append(".").append(extension);
> }
>
> // どんなパスになるかを確認のためコンソールに出す
> System.out.println("template systemID : " + name);
>
> return name.toString();
> }
> }
> ---------------------------
>
> この Engine 実装を使うようにエンジン設定をおこないます。
>
> 基本的にはドキュメントにある方法と同じなのですが、パラメータではなく
> クラス名を書き換えるので、標準のパラメータなども全部書く必要があります。
> http://mayaa.seasar.org/documentation/engine_settings.html
>
> 元のファイルは Mayaa の下記パスにありますので、engine 部分を丸々
> コピーしてクラス名だけ上記のファイルに書き換えます。
> 配置の仕方はドキュメント通りです。
> org/seasar/mayaa/impl/provider/factory/org.seasar.mayaa.provider.ServiceProvider
>
> <engine class="example.TemplateNameSampleEngineImpl">
> 標準のものをそのまま、または一部を変更したもの
> </engine>
>
> こうすると
> /foo/index$bar.html
> となるところが
> /foo/bar/index.html
> になります。
> もちろんソースコードを書き換えればいろいろな組み立てができます。
>
> --
mayaa-user メーリングリストの案内