3

コンポーネント内のネストされたタグの属性にJS値を渡すにはどうすればよいですか?

私はこのコードを持っています:

<p:remoteCommand .....>
    <f:attribute name="galaxie" value="jstest()" />
</p:remoteCommand>

そして私の単純なJSjstest関数:

function jstest(){
    return "foo";
}

バッキング Bean で galaxie の属性値をテストするとき、私は持ってjstest()いませんfoo

4

1 に答える 1

6

<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 にパラメーターを渡すも参照してください。

于 2012-12-10T14:38:59.243 に答える