我正在使用primefaces AutoMLETE强制选择按名称搜索帐户
JSF组件
<p:autoComplete value="#{journal.journal.debit}"
completeMethod="#{account.completeAccount}"
var="var" itemLabel="#{var.name}" itemValue="#{var}"
forceSelection="true" immediate="false" required="true">
Bean方法:
public List<Account> completeAccount(String query) {
List<Account> allAccounts = service.get(Account.class);
List<Account> filteredAccounts = new ArrayList();
for (int i = 0; i < allAccounts.size(); i++) {
Account foundAccount = allAccounts.get(i);
if (foundAccount.getName().toLowerCase().contains(query.toLowerCase())) {
filteredAccounts.add(foundAccount);
}
}
return filteredAccounts;
}
这工作正常,现在如果我想把搜索更改为在查询值中搜索账号。我使用了以下内容:
if (foundAccount.getName().toLowerCase().contains(query.toLowerCase()) || foundAccount.getNumber() == Integer.parseInt(query)) {
filteredAccounts.add(foundAccount);
}
但是,过滤器只返回搜索号码,而忽略名称搜索。我怎样才能做到这一点?
我认为迪帕克想说的是,你所做的是完全有效的,不是Primeface的问题,而是你的情况有问题。事实上,最明显的是没有Integer.parse整数(String s)
方法,至少在java.lang.整数
中没有。
如果这是某种类型的输入错误,并且您使用的是整数对象(而不是int原语),请确保使用对它们进行比较。等于
方法。通过==
比较整数将仅在-128-127范围内有效,超出该范围将比较引用。
希望有帮助
试试这个
if (
(foundAccount.getName().toLowerCase().contains(query.toLowerCase()))
||
(foundAccount.getNumber() == Integer.parseInteger(query))
)
{
filteredAccounts.add(foundAccount);
}