1

これは新しいコンポーネントであるため、安定していない可能性があります。

実際のデータ ソース (DB など) を使用して遅延読み込みでこのデータ スクローラーを実装できた人はいますか?


index.xhtml

<p:dataScroller value="#{postLoader.lazyModel}" var="post" lazy="true" chunkSize="5">

    <article>
        <h:outputText value="#{post.title}" />
        <br />
        <p:graphicImage value="/files/#{post.blobPath}" />
    </article>

    <hr />
</p:dataScroller>

PostLoaderバッキング

@ManagedBean(name = "postLoader")
@ViewScoped
public class PostLoaderBacking implements Serializable
{

    // ==================== 1. Static Fields ==============================

    private static final long serialVersionUID = 2732106678777694908L;

    private static final int CHUNK_SIZE = 5;


    // ==================== 2. Instance Fields ============================

    @EJB
    private PostEJB postEJB;

    private int postCount;

    private LazyDataModel<PostEntity> lazyModel;


    // ==================== 4. Constructors ===============================

    @PostConstruct
    public void init()
    {
        postCount = postEJB.getPostCount();

        lazyModel = new LazyDataModel<PostEntity>() {

            private static final long serialVersionUID = -4742720028771554420L;

            @Override public List<PostEntity> load(final int first, final int pageSize,
                    final String sortField, final SortOrder sortOrder,
                    final Map<String, Object> filters) { 


                final int startingFrom = postCount - first; 

                return postEJB.loadLatestPosts(startingFrom, CHUNK_SIZE);
            }
        };
    }


    // ==================== 7. Getters & Setters ======================

    public LazyDataModel<PostEntity> getLazyModel()
    {
        return lazyModel;
    }

}

私のソリューションは、ある程度まではうまく機能します。2 つのチャンクのみをロードします。たとえば、私のチャンク サイズが 2 の場合 (しゃれは意図されていません)、合計で 4 つの投稿が読み込まれますが、それらの投稿元はもっとたくさんあります。

ある時点でロードが停止するのはなぜですか? ページを下にスクロールしても何も起こりません。プライムフェイスの実装は、ロードするかどうかをどの基準で決定しますか?

4

2 に答える 2

1

私も同じ問題を抱えていました。

私の問題は、LazyDataModel で setRowCount(currentNumberOfRows) を使用したことでした。これにより、コンテンツが正確に 2 回読み込まれました。問題も同様でした。

データベースで使用可能な行の総数に rowCount を設定してみてください。

于 2014-06-09T19:22:42.817 に答える
0

ライブ データベースに支えられた DataScroller を実装しました。

で何が起こるかはわからないのでpostEJB、確信は持てませんが、あなたがそれに対して行った呼び出しは私には独特のようです。デバッガーを使用して (またはいくつかのロガー メッセージを追加して) 試して、load()下にスクロールしたときに が呼び出されているかどうかを確認し、何postEJB.loadLatestPosts()が返されているかを正確に確認してください。私の疑念は、EJB 呼び出しが実際には のようなものである必要がpostEJB.loadLatestPosts(first, pageSize)あり、それをstartingFrom捨てるCHUNK_SIZEことができるということです。

データ モデルの行数を設定することもできます。つまり、 lazyModel.setRowCount(postCount);

DataScroller が実際にそれを使用しているかどうかはわかりませんが、問題はありません。:)

于 2014-06-04T21:32:36.480 に答える