[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 メーリングリストの案内