[Seasar-user:13767] THtmlFormのClientId

鈴木 順 [E-MAIL ADDRESS DELETED]
2008年 4月 15日 (火) 22:18:15 JST


お世話になっております。鈴木です。

TeedaExt1.0.13を利用しております。THtmlFormのClientIdに関してです。
aタグクリック時にPageクラスのdoXXXを呼びたい要件があります。
TeedaExtではサポートされていないので、
以下の様に毎度の如くhtmlにJSPをそのまま書いております。

<h:commandLink action="#{add_addPage.doOnceCalculate}" value="btn" />

今までは
<component class="org.seasar.teeda.core.render.JsfSpecComponentIdLookupStrategy"/>
を利用しておりましたが、
TeedaにもFileUploadなど実装されたのでTomahawkを廃止しようと考え、
<component class="org.seasar.teeda.core.render.DefaultComponentIdLookupStrategy">
に変更しました。
これからajaxなどを多用したいので、id=clientIdの方が良いとも考えております。
しかし、この変更を行った途端上記commandLinkが動作しなくなりました。
(クリック後にjavaScriptエラーが起ります)

ちょっと中を見てみたのですが問題は、
THtmlFormがFormクリア用のJavaScriptを生成する際と
と
commandLinkがそのScriptを使用するScriptを生成する際に、
THtmlForm自体のClientIdが違うものになり、
Script名称に齟齬がおこっている事が問題だと分かりました。

具体的には、
org.seasar.teeda.core.render.html.HtmlFormRenderer
の
renderClearHiddenCommandFormParamsFunctionの
        String functionName = JavaScriptUtil
                .getClearHiddenCommandFormParamsFunctionName(formName);
と
org.seasar.teeda.core.render.html.HtmlCommandLinkRenderer
の
encodeHtmlCommandLinkWithJavaScript
        final String functionName = JavaScriptUtil
                .getClearHiddenCommandFormParamsFunctionName(formName)
                + "();";
で
formNameが異なるものになるので、
生成されるfunctionNameが異なるものになります。
後者はJSF通常の親のIDを:でくっつけていくので、
<component class="org.seasar.teeda.core.render.JsfSpecComponentIdLookupStrategy"/>
は動作していたのだと思います。

希望としましては、
<component class="org.seasar.teeda.core.render.DefaultComponentIdLookupStrategy">
を使用し、
<h:commandLink action="#{add_addPage.doOnceCalculate}" value="btn" />
も利用したいので修正していただけると幸いです。

影響範囲が良く分かりませんが、
一度決まったClientIdは以後変わるべきではないと思うので、
(UIComponentBaseがそうしているように感じるので)
Strategyで決めたIDをUIComponentにセットするなどではダメなのでしょうか?

検証に用いたhtmlを添付します。
exampleのaddの中においてくだされば再現します。

以上 申し訳ありませんが宜しくお願いいたします。

-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20080415/c3582af9/attachment-0001.html 


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