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