4

リンクをたどるjqueryウェイポイントとjsfを使用して無限スクロールを実装しています。無限スクロールが必要な xhtml の 1 つを prerender しました。ここで、ウェイポイントが ajax リクエストを送信するので、スクロールごとに prerender を呼び出しているのはなぜですか。これは、ページ全体が更新されていることを意味します。これを解決する方法を教えてください。

4

1 に答える 1

13

preRenderViewビューの構築中にイベントが1回だけ呼び出され、同じビューの後続のリクエストでは呼び出されないと考えているようです。これは真実ではありません。イベントは、ビューのレンダリングのpreRenderView直前に呼び出されます。ビューはリクエストごとにレンダリングされます。これには ajax リクエストも含まれます (他にどのように ajax リクエストに必要な HTML 出力を生成する必要がありますか?)。したがって、あなたが見ている動作は完全に期待されています。仕事に間違ったツールを使用しているだけです。

Beanの@PostConstructメソッドを使用する必要があります。@ViewScoped

@ManagedBean
@ViewScoped
public class Bean {

    @PostConstruct
    public void init() {
        // Do here your thing during construction of the view.
    }

    // ...
}

FacesContext#isPostback()または、レンダリング前のビュー イベント リスナーに否定チェックを追加する

public void preRender() {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        // Do here your thing which should run on initial (GET) request only.
    }
}

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

于 2013-11-14T11:15:10.927 に答える