selectonlistboxがあり、selectboxの選択が行われる/変更されるたびに、パネルグリッドをリロードしたいと思います。jsf1.2だけを使おうとしています。
a4jまたはfaces2を使用して簡単に実行できることは知っていますが、jsf 1.2でこれを実現するための良い方法を誰かが知っているなら、本当に感謝しています。
簡単な例も大いに役立ちます。
ありがとう
基本的に、カスタムAjax対応と、作業およびHTMLDOM操作を実行するための目的のJavaScriptコードを生成するViewHandler
カスタムXMLResponseWriter
およびカスタムタグを作成する必要があります。XMLHttpRequest
これは、これらのサードパーティのJSF1.xコンポーネントライブラリのほとんどが行ったことでもあります。それらはすべてオープンソースであるため、ソースコードを覗いて、例を挙げてどのように実行したかを学ぶことができます。結局のところ、これは初心者向けですが、HTTP、HTML DOM、JavaScript、およびXMLHttpRequestがどのように機能するかについての確かな知識が必要なため、簡単な作業ではありません。少しの間違いはすぐに起こります、そしてそれは初心者がそれを見つけて本当に理解するのに何年もかかるでしょう。
最善の策は、JSF 1.2にajax対応のコンポーネントライブラリ(たとえば、Ajax4jsfを含むRichFaces 3.x )を採用するか、JSF 2.0に移行することです(JSF 1.2はすでに6年以上前のものであり、JSF2.0はほぼ3年前に導入されました。すでに;JSF1.xは基本的に歴史です)。
ただし、この特定の機能要件は、フォームの検証が役割を果たす場合は確かに、多少不器用ではありますが、ajaxなしでも実行できます。これが基本的なキックオフの例です。ドロップダウンリストの変更時に親フォームを送信するようにJavaScriptに指示するだけです。
<h:form>
<h:selectOneMenu value="#{bean.selected}" onchange="this.form.submit()">
<f:selectItem itemValue="one" />
<f:selectItem itemValue="two" />
<f:selectItem itemValue="three" />
</h:selectOneMenu>
<h:panelGroup rendered="#{bean.selected == 'one'}">
One was selected.
</h:panelGroup>
<h:panelGroup rendered="#{bean.selected == 'two'}">
Two was selected.
</h:panelGroup>
<h:panelGroup rendered="#{bean.selected == 'three'}">
Trree was selected.
</h:panelGroup>
</h:form>
これにより、送信ボタンを押したかのように、ドロップダウンリストの変更時にフォーム全体が同期的に送信されます。ただし、前述のように、同じフォームの他の場所で検証を実行している場合は、他のすべてのフォーム要素の検証を防止するためにimmediate="true"
、かなりの数のハックを導入する必要があります。詳細な例については、 「子メニューvalueChangeListener
の作成」も参照してください。
まったく異なる代替手段は、すべてをHTML応答にレンダリングし、CSSを使用して非表示にしてから、属性で参照されるJS関数でdisplay:none
JavaScriptを使用して表示を切り替えることです。element.style.display
onchange
JSF 2に移行する方がよいと思います。JSF1.2で移行する場合は、JQueryやプロトタイプなどのJSライブラリを使用し、イベントでJS関数を呼び出し、パネルグリッドを使用してテンプレートページへのURLを指定してAJAXアップデータを呼び出します。およびロジック(例:/mypanaelGrid.jsf)。