0

私は2つのフィールドを持っています。1 つは、場所のリストを含む ah:selectOneMenu です。もう 1 つは ah:inputText です。

私がやろうとしているのは、ユーザーが selectOneMenu で場所を選択して検索をクリックすると、その場所が検索されるということです。彼が selectOneMenu で場所を選択し、inputText で別の場所を入力して検索をクリックすると、選択された場所ではなく、書かれた場所が検索されます。

したがって、ユーザーが入力テキストに何かを入力すると、selectOneMenu が無効になり、フィールドをクリアすると、再び有効になります。イベントでjavascriptを試しました

onchange="if (this.value !='') document.getElementById('placeSelectOneMenu').disabled='true'"

しかし、うまくいきませんでした。私に何ができる?何か案は?

フィールドを正しく再レンダリングするよりも、検索をクリックしたときにのみ機能します。私が欲しいのは、動的に再レン​​ダリングすることです。

4

1 に答える 1

2

要素 ID は、JSF コンポーネント ID ではなく、生成された HTML 要素 ID の ID である必要があります。JavaScript には、サーバー側の JSF コードの概念がまったくありません。表示およびアクセスできるのは、JSF によって生成された HTML DOM ツリーだけです。ブラウザーでページを開き、右クリックして[ソースの表示]を選択します。生成された a の HTML は次の<h:selectOneMenu id="placeSelectOneMenu">ようになります。

<select id="someFormId:placeSelectOneMenu">

(someFormId親の ID はどこにありますか<h:form>)

この場合、代わりに次のように取得する必要があります

document.getElementById('someFormId:placeSelectOneMenu')

ただし、サーバー側の JSF に通知せずにクライアント側で HTML 入力要素を変更すると、予期しない動作が発生する可能性があるため (純粋な JS によってクライアント側で有効にすると、サーバー側で魔法のように有効になることはありません)。 JSF は、最初に無効化されたフィールドの送信された値を処理しません)、RichFaces を使用している場合は、RichFaces 3.x の<a4j:support>タグなど、純粋な JSF アプローチを使用することをお勧めします。

于 2011-05-27T19:58:08.343 に答える