Primefaces 在扩展p:dataTable的复合组件中未正确解析sortBy属性

Primefaces 在扩展p:dataTable的复合组件中未正确解析sortBy属性,primefaces,jsf-2,datatable,composite-component,Primefaces,Jsf 2,Datatable,Composite Component,我正在使用Primefaces编写一个应用程序,我需要创建大量的数据表。由于这些数据表的配置几乎相同,我决定为它们创建一个复合组件。我在web文件夹中创建了一个文件,/resources/composite/myDatatable.xhtml <?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:p="http://primefaces.org/

我正在使用Primefaces编写一个应用程序,我需要创建大量的数据表。由于这些数据表的配置几乎相同,我决定为它们创建一个复合组件。我在web文件夹中创建了一个文件,
/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}


我怎样才能解决这个问题?我对复合材料组件的解释有误吗?

您的PF版本是什么?如果我没记错的话,这个字段不是一个将数据解释为EL的字段,而是自己解析它(去掉{和},去掉“字段”的第一部分(在您的例子中是cc),并将其余部分用作变量元素上的字段。因此您可以将
{blablablabla.attrs.sortBy}
在那里,它可以正常工作same@Kukeltje我使用的是PF 6.1,但你认为我没有办法让它工作吗?不知道……从来没有用这样的字段包装过这样的组件。但我知道OptimusFaces项目也有类似的功能。我可以检查一下,但你应该检查一下,这是一个非常非常有趣的项目著名、绝妙、绝妙的BalusC和Partners您可以尝试
sortField
属性而不是
sortBy
?我检查了,注意到了一些特性,但sortField可能会work@Kukeltje当我使用sortField时,它会进行渲染,但会将一个空字符串传递给加载方法。因此不会进行排序。您的PF版本是什么如果我没记错的话,这个字段不是将数据解释为EL的字段,而是自己解析它(去掉{和},去掉“字段”的第一部分(在您的例子中是cc),并将其余部分用作变量元素上的字段。因此您可以将
{blablablabla.attrs.sortBy}
在那里,它可以正常工作same@Kukeltje我使用的是PF 6.1,但你认为我没有办法让它工作吗?不知道……从来没有用这样的字段包装过这样的组件。但我知道OptimusFaces项目也有类似的功能。我可以检查一下,但你应该检查一下,这是一个非常非常有趣的项目著名、绝妙、绝妙的BalusC和Partners您可以尝试
sortField
属性而不是
sortBy
?我检查了,注意到了一些特性,但sortField可能会work@Kukeltje当我使用sortField时,它会进行渲染,但会将一个空字符串传递给加载方法,因此不会进行排序。