如何在 selectOneMenu 中使用 LazyDataModel 列表

How to use LazyDataModel List in a selectOneMenu

我想在 SelectOneMenu 中使用 LazyDataModel 列表,但 selectoneMenu 没有显示任何内容。这是我的代码

public void show() {

    beneficiaries = new LazyDataModel<Fournisseur>() {
    private static final long serialVersionUID = 1L;
    private List<Fournisseur> list;

    @Override
    public List<Fournisseur> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters){

        list = service.getAll((String)filters.get("benef.intitule"),first, pageSize);
        this.setRowCount(service.count((String)filters.get("benef.intitule")));
        return list;
    }
    @Override
    public Object getRowKey(Fournisseur obj) {
        return obj.getCpt();
    }
    @Override
    public Fournisseur getRowData(String rowKey) {
        Fournisseur o=null;
        if(rowKey != null) {
        for (Fournisseur obj : list) {
            if(rowKey == obj.getCpt()) {
                o = obj;
            }
        }
        return o;
        }else {
          return null;
        }
    }
    };

}

这是我的html代码

<p:selectOneMenu id="beneficiary" value="# 
{documentController.doc.beneficiary}" converter="# 
{beneficiaryConverter}" panelStyle="width:160px" required="true"  >
<f:selectItem itemLabel="Selectionner" itemValue=""  />
<f:selectItems  value="#{beneficiaryController.beneficiaries}" 
var="beneficiary" itemLabel="#{beneficiary.intitule}" itemValue="# 
{beneficiary}"  />
</p:selectOneMenu>

我已经测试了 selectOneMenu 之外的列表,它工作正常。

您正在使用 PrimeFaces 并希望允许用户 select 从众多选项中选择一个。正如 Melloware 提到的,LazyDataModel 是为了与 DataTable 或其他支持分页的组件一起使用(例如 DataGrid

对于您的用例 p:autoComplete 似乎是最好的方法。

dropdown="true" 使它看起来像一个 selectOneMenu,您可以使用 maxResults="5".

限制显示的项目数
<p:autoComplete dropdown="true" maxResults="5" value="#{autoCompleteView.txt6}"
   completeMethod="#{autoCompleteView.completeText}" />

您需要编写自定义自动完成方法来查找给定用户搜索输入的匹配项:

public List<String> completeText(String query) {
    List<String> results = new ArrayList<String>();
    // fill the result matching the query from user input
    return results;
}