我正在尝试在 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>
列.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 设置为'#{value'而不是'id'。因此,模板内的参数在传递给 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 的模板还是这不应该工作?如果可能,我该怎么做才能正确传递参数?