2009-08-27 6 views
0

デフォルトでは、JSFはHTMLフィールドID名を動的にレンダリングします。 ID名は、formname:id_some_random_numberの形式でランダムに生成されます。JSFフレームワークでのhtmlフィールド値へのアクセス

このため、私はdocument.getElementById( "")を使用できません。

この問題の解決方法はありますか?

答えて

1

あなたがそれを使用できる場合は、UIComponent.getClientId(JSF 2を使用して生成されたIDを取得することができ、引数なしを追加していませんこれはEL式でより便利になります)。 JSFコンポーネント識別子の操作に関するヒントについては、this blog postを参照してください(注意事項にも注意してください)。

2

入力のIDを指定するだけで済みます。 ただし、IDの前には、入力フィールドを含むフォームのIDが付いています。例えば

:myInput:

<h:form id="myForm"> 
    ... 
    <h:inputText id="myInput" .../> 

のinputTextの本当のIDがあるmyFormです。次いで

var obj = document.getElementById("myForm:myInput"); 


(精度のために)編集

のコンポーネントはJavaでNamingContainerインタフェースを実装する場合、具体的には、全て:

したがって、このJavaScriptコードが動作しますネストされたコンポーネントのIDの前には、このコンポーネントのIDが付加されます。これは、<h:form/>コンポーネントの場合で、<h:datatable/>の場合も同様です。

+0

これは動作していますが、コンポーネントを別のコンポーネントに埋め込んだ場合のように、生成されたIDは予測できません。 – Madhu

+0

オリジナルの投稿を編集してそのような例を挙げることはできますか? – romaintaz

+0

これは私のアプリケーションで動作します。私はあなたのコンポーネントのIDのいずれかを変更するか、別のフォームに入れて、あなたのJavaScriptが動作を停止するかのように、それを使用するのは嫌です。 –

2

他のすべてが失敗した場合は、要素に固有のcssクラスを与え、getElementsByClassName()を使用してアクセスしてみることができます。または、既知のidを持つ要素のchildNodes()を参照してみてください。それとも、既知のID 内部のターゲット要素にノードを追加してから.parentNodeを使用することができます:)

+0

これは本当に複雑な解決策だと思われます...なぜ単に "id"属性を使用するのですか? – romaintaz

+0

ポスターが言っているように、ランダムに生成されているので、IDを使うことはできません。 – n1313

+0

「id」属性を自分で定義する場合を除いて、ランダム生成されます... – romaintaz

関連する問題