ace:dataTable に遅延読み込みを実装しようとしています。私の Web アプリケーションには非常に多くのテーブルがあるため、列のテンプレートを使用して冗長性を削減しようとしました。現在、私のテーブルは次のようになっています。
私のxhtmlページのデータテーブル
<ace:dataTable
id="produktdatenTabelle"
value="#{produktdatenBean.lazyModel}"
var="row"
rows="20"
paginator="true"
paginatorPosition="bottom"
paginatorAlwaysVisible="true"
lazy="true">
<ui:include src="/resources/aceDataTable/column.xhtml">
<ui:param name="title" value="ID" />
<ui:param name="value" value="#{row.id}" />
</ui:include>
<ui:include src="/resources/aceDataTable/column.xhtml">
<ui:param name="title" value="Description" />
<ui:param name="value" value="#{row.description}" />
</ui:include>
</ace:dataTable>
column.xhtml
<ui:composition>
<ace:column headerText="#{title}" sortBy="#{value}" filterBy="#{value}" filterMatchMode="contains">
<c:choose>
<!-- Editable -->
<c:when test="${editable == 'true'}">
<ace:cellEditor>
<f:facet name="output">
<h:outputText value="#{value}"/>
</f:facet>
<f:facet name="input">
<h:inputText value="#{value}" />
</f:facet>
</ace:cellEditor>
</c:when>
<!-- Not editable -->
<c:otherwise>
<h:outputText value="#{value}"/>
</c:otherwise>
</c:choose>
</ace:column>
</ui:composition>
produktdatenBean.lazyModel のクラス
public class LazyDataModelImpl<D> extends LazyDataModel<D>
{
@Override
public List<D> load(int first, int pageSize, SortCriteria[] sortCriteria, Map<String, String> filters)
{
...
}
}
パラメータ「first」と「pageSize」が正しく渡され、データベースからオブジェクトをロードするために使用できます。だからすべてがそこで働いています。しかし今、私は並べ替えようとしています。
列 ID で並べ替えると、配列 'sortCriteria' で SortCriteria のオブジェクトが取得されます (予想どおり)。残念ながら、propertyNameが'id'ではなく'#{value'に設定されています。そのため、テンプレート内のパラメーターは、load() メソッドに渡されたときに解決されません。
テンプレートを削除してテーブルを
テンプレートを削除したデータテーブル
<ace:dataTable
id="produktdatenTabelle"
value="#{produktdatenBean.lazyModel}"
var="row"
rows="20"
paginator="true"
paginatorPosition="bottom"
paginatorAlwaysVisible="true"
lazy="true">
<ace:column headerText="ID" sortBy="#{row.id}" filterBy="#{row.id}" filterMatchMode="contains">
<h:outputText value="#{row.id}"/>
</ace:column>
<ace:column headerText="Description" sortBy="#{row.description}" filterBy="#{row.description}" filterMatchMode="contains">
<h:outputText value="#{row.description}"/>
</ace:column>
</ace:dataTable>
すべてが期待どおりに機能します (SortCriteria は propertyName を'id'に設定しました)。
だから私の質問は: 遅延読み込み ace:dataTable でテンプレートを使用できますか、またはこれは機能しないはずですか? 可能であれば、パラメータを正しく渡すにはどうすればよいですか?