3

次のように定義された dataTable を取得しました。

<p:dataTable var="account" value="#{customerBean.accounts}"
            id="accounts" lazy="true">
            <p:column>
                <f:facet name="header">
                    <h:outputText value="#{msg['editCustomerForm.accountNumbers.header']}" />
                </f:facet>
                <h:outputText value="#{account.accountNumber}" />
            </p:column>
</p:dataTable>

アカウントはこのメソッドで読み込まれます (@PostConstruct メソッドで呼び出されます)。

 private void initAccounts() {
        accounts = new CustomLazyDataModel<Account>() {
            @Override
            public List<Account> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
                return accountService.getAccountsForCustomer(customerModel.getCustomer(), first, pageSize);
            }
        };
        accounts.setPageSize(10);
    }

CustomLazyDataModel は、このバグのためにのみ存在します: http://code.google.com/p/primefaces/issues/detail?id=1544 (コメント #23 を参照)

ただし、ページがレンダリングされると、コンポーネントに「レコードが見つかりません」と表示されます。

サーバーで実行された休止状態ログの SQL は 1 行を返し、dataTable の代わりに dataList を使用すると、結果が正しくなります (1 行がレンダリングされます)。

<p:dataList value="#{customerBean.accounts}" var="account"
            id="accounts-old" rows="10"
            type="none" lazy="true">
            <f:facet name="header">
                <h:outputText value="#{msg['editCustomerForm.accountNumbers.header']}" />

        </f:facet>

        <h:outputText value="#{account.accountNumber}" />

    </p:dataList>

レコードを使用する<h:dataTable>場合もあります。では、何が問題なの<p:dataTable>ですか?

4

1 に答える 1

2

コンポーネントに欠けていたのは、rows パラメータだけでした。

<p:dataTable var="account" value="#{customerBean.accounts}" id="accounts" lazy="true" rows="10"  paginatorAlwaysVisible="false" >

レコードがレンダリングされるようになりました。

于 2013-02-20T15:09:07.107 に答える