[mayaa-user:636] Re: [mayaa]複数のmayaaファイルをデフォルトにしたい
    suga
    [E-MAIL ADDRESS DELETED]
       
    2008年 2月 21日 (木) 09:38:57 JST
    
    
  
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
になります。
もちろんソースコードを書き換えればいろいろな組み立てができます。
-- 
suga ( [E-MAIL ADDRESS DELETED] )
    
    
mayaa-user メーリングリストの案内