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