如何在 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;
}
我想在 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;
}