1

JSF を使用してインターフェースを作成しています。2 番目がまだ設定されていない場合、1 つのテキスト フィールドの値が 2 番目のデフォルトを提供するようにしたいと考えています。重要なコードは次のようになります。

<h:outputScript>
function suggestValue2() {
    var value2 = document.getElementById('value2').value;
    if (value2 == "") {
        document.getElementById('value2').value = document.getElementById('value1').value;
    }
}
</h:outputScript>

<h:inputText
    id="value1"
    onblur="suggestValue2();" />

<h:inputText
    id="value2" />

問題は、これが実際には機能しないことです。これら 2 つの入力要素の実際の ID には、JSF によって生成された値がプレフィックスとして付けられ、getElementById呼び出しがタンクされます。ここで達成しようとしていることを達成するための最良の方法は何ですか?


編集: これは複合コンポーネント内に表示されることに注意してください。これは、単一のページに複数回表示される可能性があります。実際の ID を動的に設定する JSF は、望ましい動作を表します。

4

2 に答える 2

4

コンポーネントをビューにバインドし、

<h:inputText binding="#{input1}" ... />

そのクライアント ID をビューの別の場所に表示できるようにしますUIComponent#getClientId()

<h:outputScript>
    var input1 = document.getElementById('#{input1.clientId}');
    // ...
</h:outputScript>

複合コンポーネントの内部にいると述べたように、複合コンポーネント自体のクライアント ID が を介して既に利用可能であることを知っておくとよいでしょう#{cc.clientId}。したがって、より推奨される代替手段は次のとおりです。

<cc:implementation>
    <h:outputScript>
        var input1 = document.getElementById('#{cc.clientId}:input1');
        // ...
    </h:outputScript>
    ...
    <h:inputText id="input1" ... />
    ...
</cc:implementation>

以下も参照してください。

于 2013-01-18T16:32:52.820 に答える
0

Jsfは、提供されたコンテナ内でIDが一意である必要はないという「コンテナの命名」という概念を使用しています。コンテナにIDがある場合。したがって、コンテナにIDを指定していない場合、jsfは要素の前に予測できない値を追加します。コンテナのidを使用すると、containerid:elementsidになります。そしてこれはJavaScriptで確実に使用できます

于 2013-01-18T16:24:34.350 に答える