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