次のように定義された 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>
ですか?