我在从动态搜索中排序项目时遇到问题。用户将能够标记他想要搜索的系统,他可以粘贴未知数量的搜索值,并且他可以选择必须在哪个字段中搜索他的搜索值。这部分已经正常工作了。结果对象如下所示:
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 对象,我找不到如何使用它的解决方案。