[Seasar-user:10591] Re: [Teeda Ajax] 1.0.11-RC2-SNAPSHOT doOnceNextのrenderJsがtrueの時,KumuのEventが登録できない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 9月 18日 (火) 01:30:42 JST


小林 (koichik) です.

Date:    Mon, 17 Sep 2007 23:29:47 +0900
From:    Junichi Kato <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10590] Re: [Teeda Ajax] 1.0.11-RC2-SNAPSHOT doOnceNextのrenderJsがtrueの時,KumuのEventが登録できない

> > 抜本的な対策としては,Teeda が追加する <script> 等が
> > 重複しないようにしたり,オン・オフや位置を利用者が
> > 制御可能にする必要があるかと思いますが,一応回避策が
> > あるということで,当面先送りにさせてください.
> 
> 了解しました.

よねさんが JavaScript 側で対策してくれました.
teeda-ajax を以下の SNAPSHOT に置き換えれることで
先のサンプルは動きました.

http://maven.seasar.org/maven2-snapshot/org/seasar/teeda/teeda-ajax/1.0.11-RC2-SNAPSHOT/teeda-ajax-1.0.11-RC2-20070917.161725-2.jar


> > # パッチ歓迎.
> すみません.対策ともかく,まずソース読んでみたいです.
> te:renderJs="true"の場合
> <script language="JavaScript" type="text/javascript" src="/example-web/teedaExtension/org/seasar/teeda/ajax/js/kumu.js"></script>
> <script language="JavaScript" type="text/javascript" src="/example-web/teedaExtension/org/seasar/teeda/ajax/js/event.js"></script>
> <script language="JavaScript" type="text/javascript" src="/example-web/teedaExtension/org/seasar/teeda/ajax/js/disabled.js"></script>
> を挿入する処理を行っているクラスはどこになるのでしょうか?
> きっかけをいただければ自分で読み進めますので.

org.seasar.teeda.extension.render.html.THtmlHeadRenderer

です.
これの encodeEnd() メソッドの中の

        renderCssResources(context);
        renderJsResources(context);
        renderInlineCssResources(context);
        renderInlineJsResources(context);

が上記の出力をしています.
[TEEDA-374] の対応前は,この 4 行は encodeBegin() に
ありました.
大雑把に言うと,encodeBegin() が <head> の開始タグを,
encodeEnd() が終了タグを出力して,その間に <head> の
子要素が出力されます.

このクラスで出力する限り,Teeda によって自動的に
追加される <script> 等は,<head> の開始タグの直後か,
終了タグの直前かの二者択一になってしまいます.
現状では,エンコーディングを指定する <meta> や
<title> を早めに出力することを優先して終了タグの
直前に出力することにしています.

もし PI 等のマーカで指定された位置に <script> 等を
追加するようにするなら,このクラスで出力するのではなく,
<head> の子要素となる UI コンポーネントをツリーの中に
作って,そいつのレンダラで上記 4 行に相当する処理を
することになると思います.
# 対策できたのでもうやる気ないかもしれませんが.(^^;


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




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