1

私はjsfとliferayを使用しています。私はそれにとても慣れていません。一部のjavascriptまたはjqueryメソッドのjsfの要素を選択するjavascriptメソッドの場合、私はそれを好きに設定する必要があります。

<h:inputText id="abc" binding="#{abc}"/>

バインドを id と同じに設定したことに注意してください。誰かがそうするように言っています。そのようなバインディングを設定しないと、JavaScript メソッドで要素を選択できませんでした。理由は本当にわかりません。これは私のために働いていたので、詳細には触れずに使用しました

しかし、いくつかの機能のために、バインディングを実際に使用する必要があり、UIInput をマネージド Bean にバインドします。だから私は自分のタグを次のように変更しました。

<h:inputText id="abc" binding="#{mybean.uiAbc}"/>

この場合、私のjavascriptメソッドは

function doSomething(){
    $("##{abc.clientId}").val("hello everyone");
}

動いていない。それは私に例外を与えています... # is undefined..

javascript ではバインディングとは何の関係もないのに、なぜ今は動作しなくなったのでしょうか? そして、id が持っているバインディングと同じ値で以前に動作していたのはなぜですか?

4

2 に答える 2

2

で置き換える場合binding="#{abc}"binding="#{myBean.uiAbc}"、明らか#{abc.clientId}に、ビューの他の場所も で変更する必要があります#{myBean.uiAbc.clientId}

function doSomething(){
    $("##{myBean.uiAbc.clientId}").val("hello everyone");
}

と が同じ名前idbindingなければならないということは、まったくナンセンスです。

直面する可能性のある唯一の問題は、デフォルトの JSF ネーミング コンテナー区切り文字で:ある が、jQuery で使用されるような CSS セレクターの特殊文字であるため、この構成が失敗する可能性があることです。この構造は、JSF Web アプリケーションを手動で再構成して、-またはのような別の CSS セーフな文字を使用する場合にのみ機能します_。実際に のデフォルトを使用する場合は:、使用する必要があります

function doSomething(){
    $("[id='#{myBean.uiAbc.clientId}']").val("hello everyone");
}

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

于 2013-03-30T11:10:28.150 に答える
0

次の神話は間違っています。つまり、同じ id とバインディング属性を持つということです。

id="abc" binding="#{abc}" 

JSF は、フォーム ID を前に付けて提供された ID を持つコンポーネントをレンダリングします。たとえば、あなたの場合は、

:formId:abc

フォーム ID を先頭に追加しないようにするには、prependId 属性を false に設定します。IDが「abc」のコンポーネントのみをレンダリングします。

また、コンポーネントが dataTable などのコンテナに名前を付けている場合も同様です。次に、クライアントIDにアクセスする方法が異なります。

つまり、ブラウザで右クリックして要素の ID を確認すると、jQuery の ID を見つけることができます。

于 2013-03-30T09:51:46.233 に答える