[mayaa-user:895] Re: Mayaaファイルの多段化

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2010年 1月 29日 (金) 13:09:10 JST


石上です。

>> ・TemplateImpl#findMayaaAttribute
>
> こちらはm:mayaa タグの属性を辿るもので、

確かに、こちらの方で、親のmayaaで指定した templateSuffix が反映されない現象を確認しました。
個別に対応する必要がありそうですね。

ありがとうございます。

2010年1月27日23:29 suga <[E-MAIL ADDRESS DELETED]>:
> suga です。
>
>> ・TemplateImpl#findMayaaAttribute
>
> こちらはm:mayaa タグの属性を辿るもので、
>
>
>> ・XPathUtil.CascadeSelectNodesIterator#hasNext
>
> こちらは現時点では使用してません。
>
>
> --
> suga ( [E-MAIL ADDRESS DELETED] )
>
>
>
> 2010/1/26 Susumu ISHIGAMI <[E-MAIL ADDRESS DELETED]>:
>> 石上です。
>>
>> 下記の件ありがとうございます。
>> Mayaaの再ビルドは個人的にやりたくないので、
>> その方法で対応させていただきたいと思います。
>>
>> XPathも同様の対応をする必要がありますね。
>>
>> ソースを見たところ、
>> ・EngineUtil#getParentSpecification
>> の参照元は、
>> ・EqualsIDInjectionResolver#getNode
>> ・XPathMatchesInjectionResolver#getNode
>> ・TemplateImpl#findMayaaAttribute
>> ・XPathUtil.CascadeSelectNodesIterator#hasNext
>> の4箇所のようですが、上の2つは書き換えるとして
>> TemplateImplと、CascadeSelectNodesIterator
>> を書き換えないと影響があるでしょうか。
>>
>>> 単純に getParentSpecification 部分を差し替えられるようにするだけなら
>>> 既存にも影響はありませんし、良いかもしれませんね。
>>> 検討してみます。
>> ぜひ、お願い致します。
>>
>> 2010年1月24日21:55 suga <[E-MAIL ADDRESS DELETED]>:
>>> suga です。
>>>
>>> m:id の解決のみで良ければ、
>>> org.seasar.mayaa.impl.builder.injection.EqualsIDInjectionResolver
>>> の代わりとなるクラスを実装し、それを使うように設定すれば可能です。
>>>
>>> EqualsIDInjectionResolver#getNode(SpecificationNode, InjectionChain)
>>> の中で
>>> EngineUtil#getParentSpecification(Specification)
>>> を使っていますので、これを作成されたロジックに入れ換えれば良いでしょう。
>>>
>>> 使うようにするには、ServiceProvider ファイルで templateBuilder の上書き設定をします。
>>>
>>>    <templateBuilder class="org.seasar.mayaa.impl.builder.TemplateBuilderImpl">
>>>        <resolver
>>> class="org.seasar.mayaa.impl.builder.injection.MetaValuesSetter"/>
>>>        <resolver
>>> class="org.seasar.mayaa.impl.builder.injection.ReplaceSetter"/>
>>>        <resolver
>>> class="org.seasar.mayaa.impl.builder.injection.RenderedSetter"/>
>>>        <resolver class="org.seasar.mayaa.impl.builder.injection.InsertSetter"/>
>>>        <resolver
>>> class="org.seasar.mayaa.impl.builder.injection.InjectAttributeInjectionResolver"/>
>>>
>>> ここを自作クラスに置き換える
>>>        <resolver
>>> class="org.seasar.mayaa.impl.builder.injection.EqualsIDInjectionResolver">
>>>            <parameter name="reportUnresolvedID" value="true"/>
>>>            <parameter name="reportDuplicatedID" value="true"/>
>>>            <parameter name="addAttribute"
>>> value="{http://www.w3.org/TR/html4}id"/>
>>>            <parameter name="addAttribute"
>>> value="{http://www.w3.org/1999/xhtml}id"/>
>>>        </resolver>
>>>
>>>
>>>        <resolver
>>> class="org.seasar.mayaa.impl.builder.injection.XPathMatchesInjectionResolver"/>
>>>        <parameter name="outputTemplateWhitespace" value="true"/>
>>>        <parameter name="outputMayaaWhitespace" value="false"/>
>>>        <parameter name="optimize" value="true"/>
>>>        <parameter name="defaultCharset" value="UTF-8"/><!-- since 1.1.22 -->
>>>        <parameter name="replaceSSIInclude" value="false"/><!-- since 1.1.25 -->
>>>    </templateBuilder>
>>>
>>> 上記は標準の記述ですので、既に設定されている場合は EqualsIDInjectionResolver の
>>> 置き換えだけ設定してください。
>>>
>>> m:mayaa タグの属性はこれとは別のルートですので適用されません。
>>>
>>>
>>> default.mayaa を階層ごとに用意できるようにすることは以前検討したのですが、
>>> ルールが複雑になるので見送りました。
>>> 単純に getParentSpecification 部分を差し替えられるようにするだけなら
>>> 既存にも影響はありませんし、良いかもしれませんね。
>>> 検討してみます。
>>>
>>> --
>>> suga ( [E-MAIL ADDRESS DELETED] )
>>>
>>>
>>>
>>> 2010/1/24 Susumu ISHIGAMI <[E-MAIL ADDRESS DELETED]>:
>>>> お世話になっております。
>>>> 石上です。
>>>>
>>>> 私の方で調べてみたところ
>>>> EngineUtil.java158行目付近のgetParentSpecification()を以下のように
>>>> 修正し、Mayaaを再ビルドしたところ、
>>>> 思った動作に近い動きをしました。
>>>> (m:idの見つけ方だけ。beforeRenderについては未対応です。)
>>>>
>>>>    public static Specification getParentSpecification(Specification spec) {
>>>>        if (spec instanceof Page) {
>>>>                Page page = (Page) spec;
>>>>                if (page.getPageName().startsWith("/client_info")) {
>>>>                        int secoundSlashPos = page.getPageName().indexOf("/", 1);
>>>>                        secoundSlashPos = page.getPageName().indexOf("/",
>>>> secoundSlashPos + 1);
>>>>                        String pageName = page.getPageName().substring(secoundSlashPos);
>>>>                        return ProviderUtil.getEngine().getPage(pageName);
>>>>                }
>>>>                return ProviderUtil.getEngine();
>>>>        } else if (spec instanceof Template) {
>>>>            return ((Template) spec).getPage();
>>>>        }
>>>>        return null;
>>>>    }
>>>>
>>>> 前回のメールは少し実際と違っていて、実際は
>>>> ・/client_info/AAAA/foo.html
>>>> ・/client_info/AAAA/foo.mayaa
>>>> ・/client_info/BBBB/foo.html
>>>> ・/foo.mayaa
>>>> のように配置されています。
>>>>
>>>> しかし、これだと、Mayaaがリリースされる度に、修正を施さなければなりません。
>>>> PathAdjusterのように、実装を切り替えられるようになって欲しいところです。
>>>> 今後のMayaaバージョンでそのようになっていただけることを希望します。
>>>>
>>>> あるいは、もっと綺麗に対応出来る方法があれば、教えていただけると幸いです。
>>>>
>>>> よろしくお願い致します。
>>>>
>>>> 2010年1月23日15:10 Susumu ISHIGAMI <[E-MAIL ADDRESS DELETED]>:
>>>>> 石上です。
>>>>> お世話になっております。
>>>>>
>>>>> このたび、次のような要望を受けてしまいました。
>>>>> 以前質問させていただいたこと:
>>>>> http://ml.seasar.org/archives/mayaa-user/2009-December/000868.html
>>>>> の、続きのようなものでして、
>>>>>
>>>>> 以下のようにテンプレートとmayaaファイルが配置されている状態です。
>>>>> /hoge.mayaa
>>>>> /1/hoge.html
>>>>> /2/hoge.html
>>>>>
>>>>> 前回は、
>>>>> /1/hoge.htmlからも、/2/hoge.htmlからも、
>>>>> /hoge.mayaaを使用したいというものでした。
>>>>>
>>>>> 今回は、新たに
>>>>> /1/hoge.mayaa
>>>>> というファイルを配置し、ここには
>>>>> /hoge.mayaaとの「差分のみを記述したい」という要望です。
>>>>>
>>>>> このとき、
>>>>> /1/hoge.htmlからは、
>>>>> ・/1/hoge.mayaa
>>>>> ・/hoge.mayaa
>>>>> ・/default.mayaa
>>>>> に記述したm:idを使用することができ、
>>>>>
>>>>> beforeRenderは、
>>>>> ・/default.mayaa
>>>>> ・/hoge.mayaa
>>>>> ・/1/hoge.mayaa
>>>>> の順で実行され、
>>>>>
>>>>> afterRenderは
>>>>> ・/1/hoge.mayaa
>>>>> ・/hoge.mayaa
>>>>> ・/default.mayaa
>>>>> の順で実行されるようにしたいです。
>>>>>
>>>>> 現状ですと、/hoge.mayaaのすべての内容を/1/hoge.mayaaに記述
>>>>> すれば結果は得られるのですが、次々にコピーが存在してしまうと、
>>>>> 管理が仕切れないというのが主な理由です。
>>>>>
>>>>> 方法としては、以下のいずれかのようにできたらありがたいです。
>>>>>
>>>>> (1) /1/hoge.mayaaにspecExtends="/hoge.mayaa"のように記述する。
>>>>>  >> 通常のextendsでは出来ませんでした。
>>>>>
>>>>> (2) default.mayaaと同じような動作ですので、
>>>>> 現在一つだけのdefault.mayaaをチェーン状に複数配置できるようにし、
>>>>> /default.mayaa -> /foo.mayaa のようなチェーンを形成して、
>>>>> /*/foo.xhtmlからは今までdefault.mayaaを使っている感覚でdefaultチェーンを
>>>>> 参照する。
>>>>>
>>>>> 非常に難しいことだとは思いますが、
>>>>> どんなに大変でも対応したいところです。
>>>>> 前回のように何らかのクラスの実装を拡張することで
>>>>> できるならば大変幸いです。
>>>>>
>>>>> 何卒、よろしくお願い致します。
>>>>>
>>>> _______________________________________________
>>>> mayaa-user mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>>>>
>>> _______________________________________________
>>> mayaa-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>>>
>> _______________________________________________
>> mayaa-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/mayaa-user
>>
> _______________________________________________
> mayaa-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/mayaa-user
>


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