Jsf 未能对primefaces排序';多列数据表?

Jsf 未能对primefaces排序';多列数据表?,jsf,primefaces,Jsf,Primefaces,我尝试对包含两列的数据表进行排序,但失败了 我正在处理primefaces7,我试图对一个包含两列的数据表进行排序,但失败了 我遵循primefaces showcases上的示例:,将sortMode的值设置为multiple,并设置两列的sortby属性 在应用程序启动后,每次单击两个排序列中的任何一个,后端列表SortMeta的大小都是1,那么我只能使用两个排序列中的一个对数据表进行排序,但不能同时使用这两个排序列 xhtml代码: <p:dataTable var="hosp"

我尝试对包含两列的数据表进行排序,但失败了

我正在处理primefaces7,我试图对一个包含两列的数据表进行排序,但失败了

我遵循primefaces showcases上的示例:,将sortMode的值设置为multiple,并设置两列的sortby属性

在应用程序启动后,每次单击两个排序列中的任何一个,后端列表SortMeta的大小都是1,那么我只能使用两个排序列中的一个对数据表进行排序,但不能同时使用这两个排序列

xhtml代码:

<p:dataTable var="hosp"
             binding = "#{hospitalController.sortTable}"
             value="#{hospitalController.hospitalLazyModel}"
             paginator="true"
             rows="7"
             paginatorPosition="bottom"
             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
             currentPageReportTemplate="{currentPage} of {totalPages} pages, {totalRecords} records"
             rowsPerPageTemplate="7,15,30"
             lazy="true"
             id="sortTable"
             widgetVar="sortTable"
             sortMode="multiple"
             >

    <p:column headerText="Hospital Code" sortBy="#{hosp.hospitalId}">
        <h:outputText value="#{hosp.hospitalId}" />
    </p:column>

    <p:column headerText="HospitalName" sortBy="#{hosp.hospitalName}">
        <h:outputText value="#{hosp.hospitalName}" />
    </p:column>

后端代码:


    public List<StdHospital> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, Object> filters) {
        // here it always prints 1
        log.info("multiSortMeta size -> " + multiSortMeta.size());


公共列表加载(int-first、int-pageSize、列表多端口元、映射过滤器){
//这里总是打印1
log.info(“multiportmeta size->”+multiportmeta.size());
我的意思是,我只能通过列表SortMeta获得两列的一个排序信息,但是,由于后端的SortMeta类型是一个列表,为什么它不包含两列的排序信息,例如排序顺序等

如何使用这两列对数据表进行排序?

如下所示:

通过在中将
sortMode
设置为
Multiple
,可以启用多重排序 在该模式下,当metakey处于启用状态时单击排序列,可添加排序 列添加到订单组

在Windows上,这意味着在单击要排序的列时按住[ctrl]键。 这可能因不同的操作系统、键盘布局和输入方法(例如触摸设备)而异

您可以在其他操作系统/输入变体上进行测试,并将其编辑到答案中。

如下所示:

通过在中将
sortMode
设置为
Multiple
,可以启用多重排序 在该模式下,当metakey处于启用状态时单击排序列,可添加排序 列添加到订单组

在Windows上,这意味着在单击要排序的列时按住[ctrl]键。 这可能因不同的操作系统、键盘布局和输入方法(例如触摸设备)而异


您可以在其他OS/Input变体上进行测试,并将其编辑到答案中。

如果您进行延迟加载,则排序完全由您决定,与JSF甚至PrimeFaces都没有任何关系。它是DB查询或普通java排序或…但PrimeFaces无法帮到您。顺便说一句,这很好。@Kukeltje,同意。但我仍然需要前端要传递排序顺序,对吗?你按了元键吗?@Selaron,不,我的键盘没有元键。看看问正确的问题有多重要吗?你没有元键吗?通常对于Windows/Linux,它是ctrl键,对于apple,它是用于多重排序的“apple”键iirc。应该在任何键盘上。如果你进行延迟加载,排序这完全取决于你,与JSF甚至PrimeFaces都没有任何关系。它是DB查询或普通java排序或…但PrimeFaces不能帮助你。顺便说一句,这很好。@Kukeltje,同意。但我仍然需要前端按排序顺序传递,对吗?你按元键了吗?@Selaron,不,我的键盘没有元键。看到我怎么做了吗重要的是要问正确的问题?您没有元键?通常对于Windows/Linux,它是ctrl键,对于apple,它是用于多重排序的“apple”键iirc。应该在任何键盘上。