我正在使用Primefaces编写应用程序,我需要创建相当数量的数据表。由于这些数据表的配置几乎相同,我决定为这些创建一个复合组件。我在网络文件夹/resources/composite/myDatatable.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.org/ui"
xmlns:cc="http://xmlns.jcp.org/jsf/composite">
<cc:interface>
<cc:attribute name="value" type="java.lang.Object" />
<cc:attribute name="sortBy" type="javax.el.ValueExpression" />
<cc:attribute name="emptyMessage" type="java.lang.String" />
</cc:interface>
<cc:implementation>
<p:dataTable
value="#{cc.attrs.value}"
var="tableRow"
emptyMessage="#{cc.attrs.emptyMessage}"
lazy="true"
rows="15"
sortBy="#{cc.attrs.sortBy}"
sortOrder="ascending"
paginator="true"
paginatorAlwaysVisible="false"
paginatorPosition="bottom"
paginatorTemplate="#{rmsg.datatable_pagination_template}"
currentPageReportTemplate="#{rmsg.datatable_pagination_current_page}"
pageLinks="5"
styleClass="my-datatable">
<cc:insertChildren />
</p:dataTable>
</cc:implementation>
</html>
现在我试图像这样使用它:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
template="/WEB-INF/templates/main_template.xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:pe="http://primefaces.org/ui/extensions"
xmlns:my="http://java.sun.com/jsf/composite/composite">
<ui:define name="content">
<div class="ui-fluid">
<h:form>
<p:panelGrid layout="grid" columns="1" styleClass="my-panelgrid">
<my:myDatatable
value="#{componentBean.model}"
sortBy="#{tableRow.name}"
emptyMessage="#{rmsg.datatable_empty_components}">
<p:column headerText="#{rmsg.header_components_name}" sortBy="#{tableRow.name}">
<h:outputText value="#{tableRow.name}" />
</p:column>
<p:column headerText="#{rmsg.header_components_friendly_name}">
<h:outputText value="#{tableRow.friendlyName}" />
</p:column>
<p:column headerText="#{rmsg.header_components_dependson}">
<h:outputText value="#{tableRow.dependsOn.name}" rendered="#{tableRow.dependsOn != null}" />
</p:column>
<p:column headerText="#{rmsg.header_components_type}">
<h:outputText value="#{tableRow.type}" />
</p:column>
</my:myDatatable>
</p:panelGrid>
</h:form>
</div>
</ui:define>
</ui:composition>
我的问题如下:当LazyDataModel加载它的数据时,它会尝试对字符串attrs.sortBy
进行排序,而不是我给它的值#{tableRow.name}
。
我该如何解决这个问题?我对Composite Components的解释是错误的吗?