[Seasar-user:13930] Re: THtmlFormのClientId
鈴木 順
[E-MAIL ADDRESS DELETED]
2008年 4月 24日 (木) 19:06:30 JST
米林さん
お世話になっております。鈴木です。
自作コンポーネントを利用している関係上、今大量のh:commandLinkが存在します。
TeedaExtを利用しておりますが、htmlと言うよりはjspに近いものです。
全てのcommandLinkを置き換えるのであれば、
元もとの
<component
class="org.seasar.teeda.core.render.JsfSpecComponentIdLookupStrategy"/>
を利用すると思います。
しかし今ajaxなどを取り入れ始めており、
まだ初心者なので十分把握できていませんが、
各elementのidがjsf実装によって振られるIDであると
厳しいと想像しております。
一番嬉しいのは、
今のままh:commandLinkを生かせて
<component class="org.seasar.teeda.core.render.DefaultComponentIdLookupStrategy">
を利用できることです。
これが厳しいのであれば、
UIComponentとajaxを利用するjavascriptを吐く
カスタムコンポーネントを作成するなど
検討します。
以上 宜しくお願いします。
On Thu, 24 Apr 2008 18:53:04 +0900
<[E-MAIL ADDRESS DELETED]> wrote:
> 米林です。
> 返事がかなり遅れてすいません。
>
> ちなみに、JavaScriptを使ってaタグでPageクラスのActionを
> 呼べればOKでしょうか?
>
> もし、h:commandLinkを使用しなくても良ければ以下の方法で
> 実現可能です。
>
> http://d.hatena.ne.jp/yone098/20070427/1177638981
>
>
> よろしくおねがいします。
>
> ----- Original Message -----
> From: "鈴木 順" <[E-MAIL ADDRESS DELETED]>
> Sent: Tuesday, April 15, 2008 10:18 PM
>
> >
> > お世話になっております。鈴木です。
> >
> > 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の中においてくだされば再現します。
> >
> > 以上 申し訳ありませんが宜しくお願いいたします。
>
> ---
> 米林 正明
> [E-MAIL ADDRESS DELETED]
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内