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