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>
UICommand
jsf.ajax.request()
jsf.js
UICommand
そして「アクション」メソッド。
通常の方法で、対象コンポーネントのaction
oractionListener
属性を指定するだけです。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>
、同じことを行う があります。ショーケース ページも参照してください。