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