1

jspページの上部にscriplet要素があるjspページがあります。f:viewタグとh:formタグの後の本文には、アクションを提供するa4j:commandButtonがあります。これで、サーバーへのajax呼び出し中に、scriplet要素が実行されるたびにa4j:commandButtonを押すと。それは正常な動作ですか、それとも何か間違いをしているのですか。

4

1 に答える 1

1

JSPスクリプトレットは、JSF ビューのビルド時に (したがって、ポストバックの復元ビュー フェーズでも) 実行される従来の JSP ビュー テクノロジの性質によるものです。そうです、それは間違いなく予想される動作です。

Java コードを最初の GET リクエストでのみ実行し、その後のポストバックでは実行したくないように聞こえます。その場合は、スクリプトレットif ResponseStateManager#isPostback()returnsをチェックインしますfalse

FacesContext context = FacesContext.getCurrentInstance();

if (!context.getRenderKit().getResponseStateManager().isPostback(context)) {
    // Not a postback. Do your job here.
}

JSF 2.x にはもっと短い方法がありFacesContext#isPostback()ますが、レガシー JSP を使用しているため、レガシー JSF 1.x もまだ使用していると思います。

以下も参照してください。


具体的な問題とは関係ありませんが、10 年前の JSP 2.0 以降、スクリプトレットの使用は推奨されていません。通常の Java クラスでジョブを実行することをお勧めします。たとえば、バッキング Bean の (ポスト) コンストラクターで。を使用<a4j:keepAlive>して、JSF 1.x リクエスト スコープ Bean で新しい JSF 2.0 ビュー スコープをシミュレートできます。

以下も参照してください。

于 2012-12-17T23:46:31.893 に答える