7

JSF アプリで ID が重複しているという問題があります。この投稿で、考えられる解決策の 1 つは、ネーミング コンテナーを使用することだと読みました。重複した ID の問題を回避するためにネーミング コンテナを使用する方法の例を教えてください。フェイスレットを使用しています。

4

2 に答える 2

12

これは、JSF1.2とfaceletsを使用して私にとってうまくいったものです:

<ui:composition>どちらも実際には名前付けコンテナーではないことを発見した<ui:component>ため、同じコンポーネントを同じフォームで複数回使用すると、重複 ID 例外で失敗します。コンポーネントの全体的なポイントは再利用性であるため、これは悪い設計のように思えます。この問題を回避するために、<f:subview>各コンポーネント内に a を含め、コンポーネント タグのパラメーターとして id を設定します。

myComponent.xhtml:

<ui:component>      
    <f:subview id="#{id}">
        ....component code
    </f:subview>
</ui:component>

他のページでの使用は簡単です (taglib.xml と web.xml を正しく設定した後):

<myTagLib:myComponent id="myCompA" />
于 2010-08-10T20:31:15.963 に答える
4

一歩下がって、重複 ID の問題が発生する理由を調査することをお勧めします。UINamingContainer根本原因を突き止めたら、独自のコンポーネントを作成するのではなく、「通常の」方法で修正します。

ID の重複エラーにはいくつかの原因が考えられます。これらは、さらに突き止めるのに役立ちます。

  • 同じコンポーネント内の異なる同じID が使用されています。 UIComponent UINamingContainer
  • 物理的に異なるコンポーネントは、同じBeanの同じ UIComponentプロパティにバインドされます。
  • JSP のみ:インクルードページではなく、f:subviewページで宣言されています。
  • 同じインクルード ページが同じコンポーネント内に複数回含まれています。 UINamingContainer
  • コンポーネントは、ID が割り当てられていない状態で動的に構築されています (例: new UIComponent()) 。

ここでは、 、 、およびUINamingContainerのそれぞれの下にあります。<h:form><h:dataTable><f:subview>

上記の提案が役に立たない場合は、質問を更新して、可能な限り最小のコード スニペットを含めます (したがって、無関係なコンポーネント、ライブラリ、HTML/CSS/JS/etc などの無関係なコード/クラッターをすべて含まない)。これにより、まったく同じ問題が再現されます変更せずにコピーして貼り付けて実行するだけです。

于 2010-08-10T13:34:28.060 に答える