[mayaa-user:995] Re: 再起動直後にtemplateSuffixを使っているページでEngineUtil.getSourcePath()が正しく取得できない

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2013年 12月 7日 (土) 13:59:02 JST


石上です

なるほど、確かに、templateSuffixはscriptを実行した結果だから、
タイミングによって実行前の情報が取得されたとしても不思議ではありませんね。
この点、注意して活用させていただきます。
ありがとうございます。

templateSuffixに"/"を挿入することでフォルダ階層を変える手法はむやみに使わない方が良いかも知れませんね。
権限関連などでどうしてもフォルダ分けしたいという場合には有力かもしれませんが、
結構ハマりどころもありそうです。
(独自にカスタマイズしたり、マニアックな使い方をしている場合などに限るかもですがw)


2013年12月4日 0:19 suga <ko.suga @ gmail.com>:
> suga です。
>
> mayaaファイル内であれば suffix が
> originalNode.getSuffixScript().execute(null)
> で取得できるので、
>
> originalNode.getTemplate(suffix, "html").systemID
>
> でしょうか。(拡張子はリクエストから)
>
> Mayaaの内部的なPageという概念ではsuffixはあくまで付属情報なので、
> 固定ではもっていなくて、レンダリングの途中で計算したsuffixを付けてテンプレートを選ぶ、という
> 形になっています。
>
>
> --
> suga ( ko.suga @ gmail.com )
>
>
> 2013/11/27 Susumu ISHIGAMI <susumu.ishigami @ gmail.com>:
>> 石上です
>>
>> マニアックな報告で恐縮ですが、Mayaaを使用したWebサイトを運用中に
>> 発生した現象を報告させていただきます。
>>
>> テンプレート処理中に現在処理しているテンプレートファイルのパスを
>> 知りたい箇所があり、以下の様な関数を定義しています。
>>
>> function get_current_page() {
>>   return Packages.org.seasar.mayaa.impl.engine.EngineUtil.sourcePath;
>> }
>>
>> このようにすれば、現在処理中のテンプレートファイルのパスが
>> 取得できて便利なのですが、templateSuffix使用時に正しく取得できないことが
>> あり、困っています。
>>
>> 正しくは
>> template$suffix.html
>> のようなパスを取得したいのに
>> template.html
>> のように、suffixなしの、オリジナルのテンプレート名
>> (そのテンプレートが実際には存在しなかったとしても)
>> を取得してしまいます。
>>
>> EngineUtil.getSourcePath()のソースを確認してみると
>>
>>     public static String getSourcePath() {
>>         Specification spec = SpecificationUtil.findSpecification();
>>         if (spec == null) {
>>             String path =
>> CycleUtil.getServiceCycle().getRequestScope().getRequestedPath();
>>             SourceDescriptor source = SourceUtil.getSourceDescriptor(path);
>>             return source.getSystemID();
>>         }
>>         return spec.getSystemID();
>>     }
>>
>> 一行目の
>> Specification spec = SpecificationUtil.findSpecification();
>> のspecがnullになるケースがあり、ifブロック内で取得されるパスでは、
>> templateSuffixが考慮されないページ名になっているようです。
>>
>>
>> SpecificationUtil.findSpecification();
>> の実装を見ると、
>>     public static Specification findSpecification() {
>>         ServiceCycle cycle = CycleUtil.getServiceCycle();
>>         NodeTreeWalker current = cycle.getOriginalNode();
>>         // リソースアクセス中にredirectしても対応できるようにする。
>>         if (current != null) {
>>             return findSpecification(current);
>>         }
>>         return null;
>>     }
>>
>> findSpecification(current);
>> はページのノードが見つかるまで、getParentNodeを繰り返すだけですので、
>> currentのparentNodeが、
>> 上手くいかない時は、nullになっています。
>>
>> この現象は、Mayaaが動いているWebサーバーを終了し、
>> 再度起動し、起動処理が行われている中で、templateSuffixを使用している
>> URLにアクセスすると、比較的高い頻度で発生しています。
>>
>> 上記コメントの
>> // リソースアクセス中にredirectしても対応できるようにする。
>> という記述が気になっています。
>> こちらはどのような状況のことをそうていされていますでしょうか?
>> 今回検証を行ったように「再起動直後アクセスする」という状況も
>>
>> 検証を行った環境は以下の通りです。
>> Windows 8.1, Tomcat 7.0, JavaSE7
>> Linux + Tomcat6の環境でも再現を確認しています。
>>
>> 本件、私の方でも調査をし、
>> もし、Mayaaに改善できるところがあれば報告させていただきます。
>>
>> また、
>> EngineUtil.getSourcePath()
>> を使用する以外に、現在処理中のテンプレートファイルのパス
>> を、templateSuffixも考慮済みで取得する方法がありましたら
>> ご教示頂けますと助かります。
>>
>> よろしくお願い致します。
>>
>> --
>> Susumu ISHIGAMI
>> susumu.ishigami @ gmail.com
>> _______________________________________________
>> mayaa-user mailing list
>> mayaa-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/mayaa-user
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user



-- 
Susumu ISHIGAMI
susumu.ishigami @ gmail.com


mayaa-user メーリングリストの案内