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