带有动态表的 Primefaces SortBy

时间:2021-05-04 13:16:20

标签: jsf primefaces primefaces-datatable

我在从动态搜索中排序项目时遇到问题。用户将能够标记他想要搜索哪些系统,他可以粘贴未知数量的搜索值,并且他可以选择必须为他的搜索值搜索哪个字段。这部分已经正常工作了。结果对象如下所示:

public class SearchResult {
    private String searchField;
    private boolean searched;
    private List<OutputOrder> outputOrder;
    private List<SearchResultElement> searchResults;
    
    public SearchResult() {
        searched = false;
        searchField = "";
        searchResults = new ArrayList<>();
        outputOrder = new ArrayList<>();
    }
    
    public void setSearchValue(String searchValue) { 
        this.searchField = searchValue;
        this.outputOrder = new ArrayList<>();
        Map<String, String> oO = ServerCache.getCache().getSysConf().getDefaultOutputOrder();
        for(String k : oO.keySet()) {
            if(k.equals(searchValue)) continue;
            OutputOrder order = new OutputOrder(k, oO.get(k));
            outputOrder.add(order);
        }
        setSearched(true);
    }

    public String getSearchField() { return searchField; }
    public boolean isSearched() { return searched; }
    public List<SearchResultElement> getSearchResults() { return searchResults; }
    public List<OutputOrder> getOutputOrder() { return outputOrder; }

    public void setSearched(boolean searched) { this.searched = searched; }
    public void setSearchResults(List<SearchResultElement> searchResults) { this.searchResults = searchResults; }
}

我需要 searched 属性来确定我是否可以显示表格,outputOrder 用于必须显示的列,将来我想让用户有机会保存自己的订单。 searchField 是用户为其搜索选择的字段。这里开始了棘手的部分。表格显示如下:

<p:dataTable id="atcSearchResults" var="result" value="#{searchhandler.searchResult.searchResults}"
   sortBy="#{searchhandler.searchfield}">
    <p:column headerText="#{searchhandler.searchResult.searchValue}">
        <h:outputText value="#{result.getValue(searchhandler.searchResult.searchValue)}" />
    </p:column>
    <p:column headerText="System">
        <h:outputText value="#{result.refSystem}" />
    </p:column>
    <p:columns value="#{searchhandler.searchResult.outputOrder}" var="order" headerText="#{order.header}" 
      field="getValue(order.value)" filterable="false" sortable="false"/>
</p:dataTable>

如您所见,第一列是用户搜索的值。除了 sortBy 表工作正常,但我需要对其进行排序,因为我想按搜索项对结果进行分组。用户需要这样做,因为他必须比较不同 refSystems 中某个项目的不同结果。如果我在加载时(在搜索之前)渲染表,我会遇到问题,因为没有要排序的列,也没有要排序的数据。如果它被搜索,primefaces 需要一个 SortMeta 对象,但我找不到如何使用它的解决方案。

0 个答案:

没有答案
相关问题