は<f:attribute>
、HTML コードの生成中に Web サーバーで実行される JSF タグです。JavaScript はクライアント側の言語であり、Web サーバーでは実行されませんが、JSF によって生成された HTML コードをすべて取得した後、Web ブラウザーで実行されます。それでも、それらが「同期して」実行されることを期待しているようです。したがって、これは真実ではありません。
考えたことを実現するには、基本的に、<h:inputHidden>
どちらが Bean プロパティにバインドされているかを指定し、リモート コマンド リクエストが発生する前に JS にそれを入力させる必要があります。
例えば
<h:form id="form">
<h:inputHidden id="galaxie" value="#{bean.galaxie}" />
<p:remoteCommand ... onstart="$('#form\\:galaxie').val(jstest())" process="@form" ... />
</h:form>
または、リクエスト パラメータ マップを表す JS オブジェクトを受け入れるリモート コマンド関数の引数として渡す方がはるかに簡単です。与えられた
<h:form>
<p:remoteCommand name="foo" ... />
</h:form>
あなたはただすることができます:
foo({ galaxie: jstest() });
@ManagedProperty
またはで収集できますExternalContext#getRequestParameterMap()
。
更新: PrimeFaces 3.3 以降、<p:remoteCommand>
関数内のパラメーターの構文が変更されました。少なくとも PrimeFaces 3.3 を使用している場合、関数呼び出しは次のようになります。
foo([{ name: 'galaxie', value: jstest() }]);
JavaScript から p:remoteCommand にパラメーターを渡すも参照してください。