如何在selectOneMenu中使用LazyDataModel列表

时间:2019-05-24 10:23:16

标签: primefaces

我想在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之外的列表,并且效果很好。

1 个答案:

答案 0 :(得分:4)

您正在使用PrimeFaces,并希望允许用户从很多选项中选择一个。如Melloware所述,LazyDataModel是与DataTable或其他以这种方式支持分页的组件一起使用的(例如DataGrid

对于您的用例,p:autoComplete似乎是最好的选择。

dropdown="true"使其看起来像一个selectOneMenu,您可以使用maxResults="5"限制显示的项目数。

<p:autoComplete dropdown="true" maxResults="5" value="#{autoCompleteView.txt6}"
   completeMethod="#{autoCompleteView.completeText}" />

您需要编写一个自定义的autoComplete方法,该方法可以找到与给定用户搜索输入匹配的内容:

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