JSF 2.3 に従って、これを使用できます<h:commandScript>。仕様の問題 613も参照してください。
<h:form>
<h:commandScript name="foo" action="#{bean.action}" render="div-to-render" />
</h:form>
function clickAndRender() {
foo();
}
Mojarra 2.3.0-m06以降で利用可能です。
この回答は、質問が投稿されてから 3 年後に上記のように更新されました。<h:commandScript>以下は、存在しなかったときにさかのぼる元の回答です。
「source」パラメーターの値がどうあるべきかわかりません(上記のコードでは「this」を使用しています)
UICommandこれは、呼び出したいコンポーネントのクライアント ID である必要があります。たとえば<h:commandLink>、<h:commandButton>標準の JSF API によって提供される などです。このようにして、JSF はリクエスト値の適用段階で、コンポーネント ツリー内の目的のコンポーネントを見つけ、そこに登録されているすべてのアクション (リスナー) をキューに入れることができます。
また、最後のパラメーターで何を実行する必要があるのか もわかりません。
フォームの送信中に処理するコンポーネントのクライアント ID をスペースで区切って指定する必要があります。で通常使用するものとまったく同じです<f:ajax execute>。
また、呼び出されるURLを定義する方法もわかりません
コンポーネントがネストされて<form>いる によって生成されたから派生した現在のページのみ。ただし、 で指定する必要はありません。は、コンポーネントのクライアント ID に基づいてすでにそれを決定します。<h:form>UICommandjsf.ajax.request()jsf.jsUICommand
そして「アクション」メソッド。
通常の方法で、対象コンポーネントのactionoractionListener属性を指定するだけです。UICommand
全体として、具体的な問題はUICommand、ビューにコンポーネントがない可能性が高いため、使用できませんjsf.ajax.request()。1 つの方法は、CSS によって非表示になっているコマンド コンポーネントを含むフォームを作成することですdisplay:none。
<h:form id="foo" style="display:none">
<h:commandLink id="bar" action="#{bean.method}" />
</h:form>
次に、パラメーターfoo:barとして使用できsourceます。
jsf.ajax.request('foo:bar', null, {'javax.faces.behavior.event': 'action', 'execute': '@form', 'render': 'div-to-render'});
<f:ajax execute="@form" render="div-to-render">上記は、コマンド コンポーネントと実質的に同じことを行います。または、このパスに移動して、document.getElementById("foo:bar").click()代わりに を使用することもできjsf.ajax.request()ます。
または、カスタムUICommandコンポーネントを作成して、JavaScript ユーザーにとって少し簡単にすることもできます。JSF ユーティリティ ライブラリOmniFacesには、そのようなコンポーネントである<o:commandScript>. ショーケース ページとソース コードも参照してください。JSF コンポーネント ライブラリのPrimeFacesにも、同様のフレーバーのコンポーネントがあり<p:remoteCommand>ます。ショーケース ページも参照してください。RichFacesには<a4j:jsFunction>、同じことを行う があります。ショーケース ページも参照してください。