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

时间:2017-07-12 14:48:57

标签: primefaces jsf-2 datatable composite-component

我正在使用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的解释是错误的吗?

0 个答案:

没有答案